jquery
2011-07-26 16 views 3 likes 
3

私は以下のコードを持っています。jqueryはそれぞれ期待通りに動作しません

var last_id = ''; 
$('.products').each(function(){ 
    $.ajax({ 
     type: "POST", 
     url: "index.php", 
     data: 'id='+last_id, 
     success: function(id){ 
      last_id = id; 
     } 
    }); 
}); 

私の問題は、私は二度目のときのidコールをAJAXの成功から、最後に挿入IDを取得し、アヤックスにそれを渡したい、ということです。 しかし、それはlast_idを取得することができませんし、もう一度空の文字列として送信します。 しかし、私はそれが最後のIDを警告するajaxの成功で警告する? どうすれば実現できますか?

+0

のを待つ必要があります。どうやってそれを成功させるのか分かりません。 –

答えて

2

2番目のリクエストを送信すると、最初のリクエストのレスポンスはまだ届いていないため、機能しません。これは、送信している要求がすべて非同期であるため、2番目の要求が最初の要求が完了するまで待機しないためです。だからこそ、空の文字列も2回目に送られています。

同期要求を送信する1つの方法は、asyncオプションをfalseに設定することです。

このlinkにアクセスし、適切な説明を見つけるためにasyncオプションを検索してください。

ただし、同期リクエストを送信すると、リクエストが完了するのを待つため、何か他の処理を行う前にブラウザが一時的にブロックされることに注意してください。

0

Ajax呼び出しがJSONデータを返しますか?もしそうなら:

success: function(data){ 
     last_id = data.id; 
    } 

またはこれに類するもの。

1

async:ajaxでfalseが指定されていると、関数のオプションが役立ちます。 しかし、私はあなたが間違った方法で行っていると思う:)あなたはあまり多くのajaxクエリを実行すべきではありません。

+0

私は間違っているが、私はそれが必要... – chhameed

1

$.ajax();は非同期です。つまり、コードから分岐し、コードの実行中にすぐに実行されます。だからあなたのすべてのAJAX呼び出しは、それらのいずれかが戻る前にほぼ同じ時刻に開始されます。あなたのアヤックスのパラメータで'async': false,を使うことができますが、これはすべてのリクエストが完了するまでブラウザをフリーズさせるかもしれません。あなたが非同期的に次の呼び出しを行うためにコールバックされるまで待つことによってこの問題を回避でき

var last_id = '', count = 0; 
(function getId(){ 
    $.ajax({ 
     type: "POST", 
     url: "index.php", 
     data: 'id='+last_id, 
     success: function(id){ 
      last_id = id; 
      if(++count < $('.products').length) 
       getId(); 
     } 
    }); 
    }); 
})(); 

しかし

を私はあなたのような状況で、1つの要求を行う方がよいと持っていると思いますサーバーはJSONのIDの配列で応答します。

0

あなたはAJAX呼び出しが次のAJAX呼び出し(数2)が送信された時点で返されていないためだ各アヤックス

var pro=$('.products').lenght; 
last_id(0,""); 
function last_id(index,lastid){ 
    $.ajax({ 
     type: "POST", 
     url: "index.php", 
     data: 'id='+lastid, 
     success: function(id){ 
      if(index<pro.length){ 
      last_id(index+1,id); 
      } 
     } 
    }); 
}); 
} 
関連する問題