两个ajax同时请求同一事件。 什么应该是典型的行为? 如果请求是同步的,它是如何不同的

在下面的javascript代码中,我同时发送两个Ajax请求。
在使用Firebug进行分析后,我得出了一个不寻常的结论:
“哪个(Ajax)响应首先是打印最后”

问题2:如果我将Ajax url目标分配给随机字符串(比如“abcd”)[不存在]那么ajax调用的总数将增加到3?

$(document).ready(function(e) { $("form[ajax=true]").submit(function(e) { e.preventDefault(); var form_data = $(this).serialize(); var form_url = $(this).attr("action"); var form_method = $(this).attr("method").toUpperCase(); $("#loadingimg").show(); $.ajax({ url: form_url, type: form_method, data: form_data, cache: false, success: function(returnhtml){ alert ("a"); // $("#result").html(returnhtml); // $("#loadingimg").hide(); } }); $.ajax({ url: form_url, type: form_method, data: form_data, cache: false, success: function(returnhtml){ // $("#duplicate").html(returnhtml); // $("#loadingimg").hide(); alert("b"); } }); }); }); 

请参考以下小提琴 。

Gaurav,你有一个错误,在第一个$ .ajax结束时它必须以as ),结束),第二个as )

你不能以;

 var result1; var result2; $.when( $.ajax({ // First Request url: form_url, type: form_method, data: form_data, cache: false, success: function(returnhtml){ result1 = returnhtml; } }), $.ajax({ //Seconds Request url: form_url, type: form_method, data: form_data, cache: false, success: function(returnhtml){ result2 = returnhtml; } }) ).then(function() { $('#result1').html(result1); $('#result2').html(result2); }); 

我不确定我完全理解,但我会尽力给你一些信息。 就像大卫说的那样,第一个请求似乎是最后一个请求,但在许多情况下会有所不同。 您可以通过不同的方式来控制请求的结果或顺序。

1)第一个请求成功后,您可以发起第二个请求。 出于速度目的,我不建议这样做,因为您的请求并非并行运行。

 $.ajax({ // First Request url: form_url, type: form_method, data: form_data, cache: false, success: function(returnhtml){ $.ajax({ //Seconds Request url: form_url, type: form_method, data: form_data, cache: false, success: function(returnhtml){ // $("#duplicate").html(returnhtml); // $("#loadingimg").hide(); alert("b"); } }); alert ("a"); // $("#result").html(returnhtml); // $("#loadingimg").hide(); } }); 

2)如果您需要同时拥有两个请求响应,则首选方法可能是jQuery延迟。 这将使两个请求并行运行,一旦收到两个响应,您就可以继续进行。

像这样的东西:

 var result1; var result2; $.when( $.ajax({ // First Request url: form_url, type: form_method, data: form_data, cache: false, success: function(returnhtml){ result1 = returnhtml; } }); $.ajax({ //Seconds Request url: form_url, type: form_method, data: form_data, cache: false, success: function(returnhtml){ result2 = returnhtml; } }); ).then(function() { $('#result1').html(result1); $('#result2').html(result2); }); 

查看:

https://api.jquery.com/jQuery.when/

http://api.jquery.com/deferred.then/

https://api.jquery.com/deferred.done/

我希望这有帮助!

或者在代码中使用server_response 。 该脚本以条件开头:

 if (recherche1.length>1) { $.ajax({ // First Request type :"GET", url : "result.php", data: data, cache: false, success: function(server_response){ $('.price1').html(server_response).show(); } }), $.ajax({ //Seconds Request type :"GET", url : "result2.php", data: data, cache: false, success: function(server_response){ $('.price2').html(server_response).show(); } }); } 
 var result1; var result2; $.when( $.ajax({ // First Request url: form_url, type: form_method, data: form_data, cache: false, success: function(returnhtml){ result1 = returnhtml; } }); $.ajax({ //Seconds Request url: form_url, type: form_method, data: form_data, cache: false, success: function(returnhtml){ result2 = returnhtml; } }); ).then(function() { $('#result1').html(result1); $('#result2').html(result2); });