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

ato*_*217 7 javascript ajax jquery frontend

在下面的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");
      }           
    }); 
  });
});
Run Code Online (Sandbox Code Playgroud)

请参考以下小提琴.

小智 15

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);
});
Run Code Online (Sandbox Code Playgroud)


wrx*_*sti 5

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

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();                    
       }           
    });   
Run Code Online (Sandbox Code Playgroud)

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);
});
Run Code Online (Sandbox Code Playgroud)

查看:

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

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

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

我希望这有帮助!