2016-06-22 12 views
0

我在項目中使用Typescript和jQuery ajax。在其中一個應用程序頁面(類似於儀表板)中,我有15個網格,每個網格都帶有WebApi調用和一些額外的調用來呈現某些組合框。除此之外,在我的應用程序標題中,我還有其他組件正在爲用戶和其他組合框請求數據。最後,當我加載特定頁面時,ajax調用的數量將達到。Internet Explorer 9隨機不進入jQuery Ajax完成回調

一切都在瀏覽器,Mozilla和IE工作罰款> = 10 在IE9,有時會發生從這些24 一個特定呼叫到不進入AJAX done回調。這個電話沒有什麼特別之處。在網絡中,它的請求將從後端返回status 200,所以它應該輸入回調。收到的JSON是有效的,ajax調用每次都是一樣的,但它的行爲不同。

如果我刪除所有其他呼叫並只留下有問題的呼叫,則問題不再發生。

IE9在短時間內發出的ajax調用數量有問題嗎?

我正在使用Typescript和我的功能是使請求如下。

public Request(controllerActionName: string, method: string, data?: Object, headersData?: Object, countRequest: boolean = true) { 
     let dataType = "json"; 
     let headers = _.extend({ "accept": "application/json; odata=verbose" }, headersData); 

     if (method === "DELETE") { 
      dataType = ""; 
     } 

     if (BaseWebApi.asyncRequestCount === 0 && countRequest) { 
      PubSub.publishSync(OsiIDs.NotifyAsyncOperation, true); 
     } 
     console.log(controllerActionName + "/" + method + " ---- prevCount: " + BaseWebApi.asyncRequestCount + " ---- nextCount: " + (BaseWebApi.asyncRequestCount + 1)); 
     countRequest && BaseWebApi.asyncRequestCount++; 
     let response = $.ajax({ 
      url: this.module + controllerActionName, 
      method: method, 
      headers: headers, 
      contentType: (method.toLowerCase() === "get" ? "" : "application/json"), 
      dataType: dataType, 
      data: (method.toLowerCase() === "get" ? data : JSON.stringify(data)) 
     }); 

     response.done(() => { 
      if (BaseWebApi.asyncRequestCount === 1 && countRequest) { 
       PubSub.publishSync(OsiIDs.NotifyAsyncOperation, false); 
      } 
      console.log(controllerActionName + "/" + method + " ---- prevCount: " + BaseWebApi.asyncRequestCount + " ---- nextCount: " + (BaseWebApi.asyncRequestCount - 1)); 
      countRequest && BaseWebApi.asyncRequestCount--; 
     }).fail((data, code, message) => { 
      if (BaseWebApi.asyncRequestCount === 1 && countRequest) { 
       PubSub.publishSync(OsiIDs.NotifyAsyncOperation, false); 
      } 
      console.log(controllerActionName + "/" + method + " ---- prevCount: " + BaseWebApi.asyncRequestCount + " ---- nextCount: " + (BaseWebApi.asyncRequestCount - 1)); 
      countRequest && BaseWebApi.asyncRequestCount--; 
     }); 

     return response; 
    } 

綁定ajax調用會解決這個問題嗎?

感謝

回答

0

好象在等待服務器響應時,像IE9有一個默認的超時時間。 所以服務器返回了響應,但是因爲這個,沒有調用ajax done回調。

在執行ajax調用時指定更大的timeout解決了問題。