繁体   English   中英

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

[英]calling jQuery.ajax consecutively results in single callback

这是一个有趣的问题。

我正在做异步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(由服务器返回)

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

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

UPDATE

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

行为没有改变。

UPDATE

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM