1

$.ajax リクエストを送信し、レスポンス HTML をチェックして、特定のテキストが含まれているかどうかを確認する必要があります。実際には、別の関数を実行し、現在のループを中断して、他のアイテムの要求を作成し続けないようにしたいと考えています。

独自のスコープ内にあるため、成功関数内のループを中断できないことはわかっています。どんな解決策も素晴らしいでしょう。

    for(var i in list) {

      var item = list[i];

      $.ajax({
            type: 'POST',
            url: baseURL + '/ChangeItems/CheckAvailability',
            data: { 'newitem': item, 'purchaseItem': false },
            error: function(jqXHR, textStatus) { alert(textStatus); },
            dataType: 'text',
            success: function(data) { if(checkItem(data)) { buyItem(); break; } }
        });
   }
4

4 に答える 4

1

私はこのコードをテストしていませんが、これはアイデアであり、動作するはずです。

var list = [...], i = 0;
function myAjaxRequest(i)
{ 
    var item = list[i];

    $.ajax({
        ...
        success: function(data)
        {
            if( checkItem(data) )
            {
                buyItem();
            }
            else if( typeof list[i+1] != "undefined" )
            {
                 myAjaxRequest(i+1);
            }
        }
        //, error: function(){ if( typeof list[i+1] != "undefined" ) myAjaxRequest(); }
    });
}

myAjaxRequest(i);
于 2012-09-21T03:57:52.307 に答える
0

同期させて、$.ajax の外部で処理を行うことができます。

for(var i in list) {
  var item = list[i];
  var result;

  $.ajax({
        type: 'POST',
        url: baseURL + '/ChangeItems/CheckAvailability',
        data: { 'newitem': item, 'purchaseItem': false },
        error: function(jqXHR, textStatus) { alert(textStatus); },
        dataType: 'text',
        async: false,
        success: function(data) { result = data; }
   });

   if(checkItem(result)) { buyItem(); break; }
}
于 2012-09-21T03:56:05.507 に答える
-1

非同期リクエストの各 xhr オブジェクトを配列に格納し、そのうちの 1 つが正常に終了した時点で後続のすべてのリクエストをキャンセルできます。

var xhrList = [];
var xhr = $.ajax({
    type: 'POST',
    url: baseURL + '/ChangeItems/CheckAvailability',
    data: { 'newitem': item, 'purchaseItem': false },
    error: function(jqXHR, textStatus) { alert(textStatus); },
    dataType: 'text',
    async: false,
    success: function(data) { 
        for(var i = 0; i < xhrList.length; i++){
            xhrList[i].abort();
        } 
    }
});
xhrList.push(xhr);
于 2012-09-21T04:01:56.277 に答える