Javascript 连续调用jQuery.ajax会导致单个回调

Javascript 连续调用jQuery.ajax会导致单个回调,javascript,jquery,ajax,Javascript,Jquery,Ajax,这是一个有趣的问题 我正在做一个异步ajax put return $.ajax({ url: url, type: 'PUT', contentType: 'application/json; charset=utf-8', async: true, // default success: function (result, textStatus, xhr) {...} 除非用户在上一个调用返回之前执行p

这是一个有趣的问题

我正在做一个异步ajax put

    return $.ajax({
        url: url,
        type: 'PUT',
        contentType: 'application/json; charset=utf-8',
        async: true, // default
        success: function (result, textStatus, xhr) {...}
除非用户在上一个调用返回之前执行put(即使是异步的,调用也需要0.5秒才能完成),否则这项工作与预期的一样正常

如果用户按下按钮几次(执行多个PUT),则会发生以下情况:

  • 我在fiddler中只看到一个服务器调用
  • 每次点击成功都会被炒鱿鱼
  • 所有回调都获得相同的新行ID(由服务器返回)
这让我得出了一个不可避免的结论:第一次服务器回调会触发所有未完成的回调

我可以禁用该按钮,直到回调返回,但是否可以处理多个未完成的调用?这是浏览器限制吗?最好的处理方法是什么

更新

作为一个测试,我改用POST而不是PUT:adjusted类型:JS端的“POST”,webapi(服务器端)的[HttpPost]

行为没有改变

更新


看看像..这样的帖子。。这真的应该管用。我看不出其他并发请求没有发送到服务器的具体原因

PUT请求不应该是幂等的吗?也就是说,提交多个请求应该生成相同的响应?如果是这样的话,代码可能只是试图合并相同的PUT请求,因为它们最终应该得到相同的结果。如果您要为每个post增加一些ID(即更改服务器状态),那么您应该使用post而不是PUT


这可能无法解决您的问题;这只是一个想法。

您不能等待javascript中的异步回调。您必须重新构造代码,以便根据实际回调的异步响应完成所有后续工作


如果需要进行多个连续的ajax调用,则发出第一个调用,在第一个ajax调用的成功处理程序或响应处理程序中,发出第二个ajax调用,在第二个ajax调用的响应处理程序中,您可以对数据执行任何您想执行的操作

Try
cache:false
可能存在缓存,这就是为什么使用fiddler只能看到一个响应。浏览器是否认为它发出了不同的请求?浏览器也只看到一个put。我尝试设置cache:false,但到目前为止,在上述行为中没有发现任何差异。您需要向我们展示整个函数,为什么要返回承诺,以及如何处理结果,因为这通常不是一个问题,既不存在PUT、DELETE,也不存在GET和POST。但我可以在fiddler中看到,只发出了一个请求。。除非我等到第一个电话结束。。然后我在fiddler中看到下一个请求。HTTP/1.1没有定义PUT方法如何影响源服务器的状态。PUT是幂等的这一点都不重要,事实上通常不是这样,我不知道为什么这一点被提升了。@BenjaminGruenbaum参见第9.1.2节在我的例子中,我使用PUT来创建一个新记录。服务器返回新行的id。“用put来表示这一点是不好的做法吗?”JesseBunch我回答的第一句话来自第9.6节。在OP的情况下,我们不知道请求是按顺序进行的,还是有可能是中间的其他请求。尽管如此,我还是对我所做的陈述进行了更正-现在我再次阅读它时,它的措辞不好。另外,让我再次重申,调用put多次在调用不重叠的情况下按预期工作。您好,这是我观察到的,我想了解一下限制或设计意图是什么,这样我就不能连续打多个电话了