两个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); });