2016-07-30 10 views
0

私はjQueryを各ループにajax呼び出しでビルドしようとしていますが、何らかの理由で実行が停止せず、すべてのコードがループします。このjqueryのそれぞれの問題は何ですか?

私はここで間違っていますか?

ザ・各ループ:

$.each(JSEFileNames, function(key, value){ 
    $.ajax({ url: "/"+key, 
     success: function(r){ 
     $(JSEPlaceholder).html(r); 
     JSEFileNames[key] = $(JSEPlaceholder).text().toString().replace(/(\r\n|\n|\r)/gm,"") + $(JSEPlaceholder).children().text().toString().replace(/(\r\n|\n|\r)/gm,""); 
     $(JSEPlaceholder).empty(); 
     return; 
     } 
    }); 
    }); 

JSEFileNamesは

JSEFileNames= { 
"index.php": "", 
"something.txt": "" 
} 

のようなものが含まれているとJSEPlaceholderは "#searchBox" を含む単なる文字列です。それは、関数の最後の行が既にあるので、returnが無意味であることを https://jsbin.com/kifisameto/edit?html,js,output

+0

見積もりはJSEFileNamesで間違っています。 – KillianC

+0

@Killianこれは問題ではありませんが、質問を書いている間の誤植です。それが問題だった場合、コードはまったく実行されませんでした。 – nicael

+0

@nicaelまさに、申し訳ありません!私はコードを更新しました。 –

答えて

0

注:

これは完全なコードです。この機能は終了するだけですが、$.eachは別の機能に含まれているため実行され続けます。ここで

$.each(JSEFileNames, ajaxFunction); 

function ajaxFunction(key, value){ 
    $.ajax({ url: "/"+key, success: successFunction }); 
} 

function successFunction(r) { 
    $(JSEPlaceholder).html(r); 
    JSEFileNames[key] = $(JSEPlaceholder).text().toString().replace(/(\r\n|\n|\r)/gm,"") + $(JSEPlaceholder).children().text().toString().replace(/(\r\n|\n|\r)/gm,""); 
    $(JSEPlaceholder).empty(); 
    return; 
} 

あなたはreturnあなたはそれが何をしたいのかやっていないことを確認できます

これは、あなたのコードを打破するとどうなるかです。 ajaxFunctionの中でreturn falseを停止する必要があります。これは、あなたがそれを行うことができる方法の例です。ここで

$.each(JSEFileNames, function(key, value){ 
    cont = true; 
    $.ajax({ url: "/"+key, async: false, 
     success: function(r){ 
     $(JSEPlaceholder).html(r); 
     JSEFileNames[key] = $(JSEPlaceholder).text().toString().replace(/(\r\n|\n|\r)/gm,"") + $(JSEPlaceholder).children().text().toString().replace(/(\r\n|\n|\r)/gm,""); 
     $(JSEPlaceholder).empty(); 
     cont = false; 
     } 
    }); 
    return cont; 
}); 

何が起こることはfalseに評価valuereturn valueは、jQueryのループを停止することです。 valuetrueの場合、ループは実行され続けます。公式文書については、hereを参照してください。

async: falseを追加しました。実際に$.ajaxは非同期関数であり、contを変更する前に戻ってきます。基本的な呼び出しは、要求が成功するか失敗すると、後で処理されます。これを回避する方法の1つは、要求を同期させることですが、その間に残りのコードは実行されません。数多くのページで目に見える検索を実行しているため、すべてのページを一度に検索するのではなく、順番に検索したいので、これはおそらくここで探しているものです。

+0

申し訳ありませんが、まだ動作していません。とにかく良い考え方。 –

+0

これを拡張できますか?正確に何が起こっているのか、そして望ましい出力は何ですか? – pie3636

+0

https://jsbin.com/kifisameto/edit?html,js,outputこれは少し役に立ちます。 –

関連する問題