同时对同一事件发出两个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");
      }           
    }); 
  });
});

请参阅下面的Fiddle。

Gaurav,您有一个错误,在第一个$.ajax的末尾,它必须以),结尾,第二个以)结尾。

你不能以; 结束

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 deferred。这将使两个请求并行运行,一旦收到两个响应,您就可以按照原来的方式继续操作。

类似这样的东西:

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

相关内容

  • 没有找到相关文章

最新更新