【发布时间】:2013-12-18 21:06:30
【问题描述】:
这是一个有趣的问题。
我正在做一个异步 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 秒才能完成)
如果用户按下按钮几次(执行多次放置),则会发生以下情况:
- 我在 fiddler 中只看到一个服务器调用
- 每次点击都会触发成功
- 所有回调都获得相同的新行 ID(由服务器返回)
这使我不可避免地得出结论,即第一个服务器回调会触发所有未完成的回调..
我可以在回调返回之前禁用按钮,但是否可以处理多个未完成的调用?这是浏览器限制吗?最好的方法来处理这个?
更新
作为测试,我切换到使用 POST 而不是 PUT:调整类型:JS 端的“POST”和 Web api(服务器端)的 [HttpPost]。
行为没有改变。
更新
查看this one.. 之类的帖子,这确实应该有效。我看不出其他并发请求没有发送到服务器的任何具体原因。
【问题讨论】:
-
试试
cache:false可能有缓存在起作用,这就是为什么你只看到一个fiddler响应。 -
浏览器是否认为它发出了不同的请求?
-
浏览器也只看到了一个 put 。我尝试设置 cache:false ,但到目前为止没有看到上述行为有任何区别。
-
你需要向我们展示整个函数,为什么你要返回承诺,以及你对结果做了什么,因为这通常不是问题,PUT、DELETE 或 GET 和 POST 都不是.
-
但我可以在 fiddler 中看到只有一个请求正在发出.. 除非我等待第一个调用完成.. 然后我会在 fiddler 中看到下一个请求。
标签: javascript jquery ajax