2011-02-10 103 views
1

好的,所以我在坐在桌面上的.html文件中有一個JQuery AJAX調用。它調用位於Web服務器上的WCF服務,在以太網中。將資源解釋爲腳本,但使用MIME類型application/json進行傳輸。 &parsererror

好消息是,它的工作原理。 Sorta ..差不多..但不完全。

將執行AJAX調用,Fiddler顯示來自Web服務的JSON響應。不幸的是,它不能一直回到瀏覽器。 callback=?在那裏,所以我沒有得到一個跨站點腳本錯誤。 (訪問控制等等等等等等)

如果我有Chrome的開發工具做到這一點打開它給了我下面的消息:

Resource interpreted as script but transferred with MIME type application/json 

成功:回調不叫,錯誤:回調回報在狀態文本中的一個單詞:parsererror

我一直在這一整天都砰的一聲。

function AJAXGet() { 
    $.ajax({ 
     url: "http://xxxx/yyyyService/yyyyService.svc/GetZZZ?callback=?", 
     dataType: 'json', 
     data: JSON.stringify('{"customerID": "1"}'), 
     contentType: "application/json; charset=utf-8; application/x-javascript", 
     success: function (data) { 
      alert(data); 
     }, 
     complete: function (data) { 
      alert(data); 
     }, 
     error: function (xhr) { 
      alert("AJAXGetError: " + xhr.statusText); 
     } 
    }); 
} 

菲德勒說,這是被派往: GET /yyyyService/yyyyService.svc/GetZZZ?callback=jQuery150833801421286173_1297309350515&%22{\%22yyyyID\%22:%20\%221\%22}%22&_=1297309350540 HTTP/1

這裏的WCF:

[OperationContract] 
[WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] 
List<Note> GetNotes(string yyyyID) 

回答

4

您使用JSONP - 你的服務器端代碼必須支持它。在這種情況下,你的WCF服務應該返回一個腳本 - 例如[callback name]([json string]),其中[回調名稱]將是jquery生成的js函數(你看到的是在fiddler請求中的回調值)和[json string]通常來自服務的JSON數據。所以檢查提琴手的響應。如果您的服務沒有返回JSONP響應,那麼您需要在服務端添加該支持。

檢查this文章怎麼做,在.NET 4中(即有JSONP支持)。對於.NET 3.5,其更多的工作 - 請參閱this MSDN article將WCF擴展爲支持JSONP。另一個快速黑客(用於.NET 3.5)可建立HTTP模塊,將觀看JSON請求和修改響應,如果請求網址callback參數。