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

时间:2013-12-03 00:16:31

标签: 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) {...}

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

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

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

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

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

更新

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

行为没有改变。

更新

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

你不能等待javascript中的异步回调。您必须重新构建代码,以根据实际回调的异步响应执行所有未来的工作。

如果你需要进行多个连续的ajax调用,那么你发出第一个ajax调用,在第一个ajax调用的成功处理程序或响应处理程序中,你发出第二个ajax调用,在第二个调用处理程序中,你发出执行你想要做的任何数据