2015-03-30 138 views
0

我有一個ASP.NET/MVC網站調用WebApi的Web服務,使用JQuery的$ .ajax()。其中大部分工作正常,但我有一個回調函數 - done(),fail(),always() - 都沒有被調用。

該服務正在被調用,並根據提琴手,返回的響應。但JQuery沒有調用任何回調函數。

其他工作正常。或似乎是。

調用代碼是一樣的,在任何情況下:

core.callService = function (serviceUrl, httpType, token, data, failMessage, callback) 
{ 
    try 
    { 
     var parameters = { 
      type: httpType, 
      dataType: "json", 
      timeout: ajaxRequestTimeoutMS, 
      headers: { "authenticationToken": "" + token } 
     }; 

     if (httpType === "POST" || httpType === "PUT" || httpType === "DELETE") 
     { 
      parameters.contentType = "application/json; charset=utf-8"; 
      parameters.data = JSON.stringify(data); 
     } 
     else 
     { 
      parameters.data = data; 
     } 

     debugger; 
     $.ajax(serviceUrl, parameters).done(
      function (result, textStatus, jqXHR) 
      { 
       debugger; 
       // ... 
      }).fail(function (jqXHR, textStatus, errorThrown) 
      { 
       debugger; 
       // ... 
      }).always(function() 
      { 
       debugger; 
       //whether success or failure 
      }); 
    } 
    catch (e) 
    { 
     debugger; 
     callback({ 
      success: false, 
      message: e.message, 
      data: null 
     }); 
    } 
    finally 
    { 
     debugger; 
    } 
}; 

跑提琴手,我可以看到請求:

GET http://localhost:52057/api/MyController/myAction?myParameters HTTP/1.1 
authenticationToken: eb76272e-b26e-4773-9d22-2218bea8beb1 
Accept: application/json, text/javascript, */*; q=0.01 
Referer: http://localhost:61986/Feedback?items%5B0%5D.updatetype= 
Accept-Language: en-US 
Accept-Encoding: gzip, deflate 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko 
Host: localhost:52057 
DNT: 1 
Connection: Keep-Alive 
Cookie: ... 

和響應:

HTTP/1.1 200 OK 
Cache-Control: no-cache 
Pragma: no-cache 
Content-Type: application/json; charset=utf-8 
Expires: -1 
Server: Microsoft-IIS/8.0 
X-AspNet-Version: 4.0.30319 
X-SourceFiles: =?UTF-8?B?RTpcZGV2XFplYnVcWmVidV93ZWJcdHJ1bmtcWmVidV93c1xhcGlcRW1haWxUb29sXHNlbmRFbWFpbA==?= 
X-Powered-By: ASP.NET 
Date: Mon, 30 Mar 2015 16:43:32 GMT 
Content-Length: 21 

{"message":"Success"} 

所以響應正在回到客戶端,但JQuery沒有調用done()函數或fail()函數或alwa ys()函數。我不明白爲什麼。我查看了其他網絡服務的響應,這些響應正在工作,我看不出有什麼不同。

任何想法?

=============跟進=============

的更多信息,和更混亂。

如果我在頁面初始化函數期間調用webservice,則執行回調。如果我從按鈕的點擊事件中調用它,它不會。

查看請求和響應,我看到的唯一區別是在請求的referer字段中。當我從事件函數調用時,我看到「?items [0] .updatetype =」附加到URL中。我看不到誰在做這件事。

+0

你使用的是什麼版本的mvc? – TheBetaProgrammer 2015-03-30 19:21:08

+0

應該沒關係。 MVC服務器只是爲html服務。我們在客戶端和WebAPI服務器之間出現問題。 – 2015-03-30 19:29:16

+0

你的權利它不應該,但它確實這個代碼應該在mvc v4中工作,但在版本5中它不會有類似的問題,這是通過序列化和使用jquery load() – TheBetaProgrammer 2015-03-30 19:32:26

回答

1

好的,這一個只是愚蠢的。經過數小時的JavaScript挖掘和監控網絡流量,試圖找出爲什麼回調函數沒有執行...

調用我的webservice的點擊事件是由提交按鈕生成的。

唉!