簡體   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