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

Son*_*oul 5 javascript ajax jquery

这是一个有趣的问题.

我正在做异步ajax put

    return $.ajax({
        url: url,
        type: 'PUT',
        contentType: 'application/json; charset=utf-8',
        async: true, // default
        success: function (result, textStatus, xhr) {...}
Run Code Online (Sandbox Code Playgroud)

这可以按预期工作,除非用户在前一次调用返回之前执行put(即使它是异步的,调用确实需要.5秒才能完成)

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

  • 我看到fiddler中只有一个服务器调用
  • 每次点击都会成功
  • 所有回调都获得相同的新行ID(由服务器返回)

这导致我不可避免的结论是第一个服务器回调触发了所有未完成的回调.

我可以在回调返回之前禁用该按钮,但是是否可以处理多个未完成的呼叫?这是浏览器的限制吗?处理这个的最佳方法?

UPDATE

作为测试我切换到使用POST而不是PUT:调整类型:JS端的'POST'和web api(服务器端)的[HttpPost].

行为没有改变.

UPDATE

看看像这样的帖子..这真的应该有效.我没有看到任何具体的原因,为什么其余的并发请求不会发送到服务器.

Jes*_*nch 1

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

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