2014-03-05 49 views
1

我運行一個Ajax從JavaScript調用的Web服務調用Web服務:文檔對象,而不是JSON時從Javascript

$.ajax(signingURI + "?fileName=" + fileName) 
     .done(function (data){ 
    }); 

我的web服務:

[WebMethod] 
public string PolicyGenerator(string fileName){ 
     return "{\"res\":\"asdasda\"}" ; 
} 

當檢查數據的說法,我收到了而不是JSON的XML文檔對象。我做錯了什麼?

在監視表達式:

data: document 
URL: "" 
anchors: HTMLCollection[0] 
applets: HTMLCollection[0] 
baseURI: null 
body: null 
characterSet: null 
charset: undefined 
childNodes: NodeList[1] 
compatMode: "CSS1Compat" 
constructor: DocumentConstructor 
cookie: [Exception: DOMException] 
defaultCharset: undefined 
defaultView: null 
...... 
+0

服務器返回什麼文件類型?由於您沒有在ajax調用中指定任何文檔類型,因此jQuery代碼將與服務器指示的文檔類型一致。如果你的服務器顯示一個HTML文檔,那麼jQuery可能會試圖把它當作那個。您還可以查看Chrome調試器的網絡選項卡,並確切地看到服務器上的線路正在傳輸什麼。 – jfriend00

+0

嗨,它返回文本/ XML; charset = utf-8 –

+0

所以,這就是jQuery如何將其視爲一個XML文檔。 – jfriend00

回答

1

如果您想使用HTTP GET,請使用ScriptMethod裝飾您的webservice方法。

[WebMethod] 
[ScriptMethod(UseHttpGet = true)] 
public string PolicyGenerator(string fileName){ 
     return "{\"res\":\"asdasda\"}" ; 
} 

此外,不要手動建立自己的交易的兩端JSON。 jQuery爲您序列化對象。

$.ajax({ 
    ... 
    data: { fileName: 'test.jpg' } 
}); 

對於GET請求,data將被序列化爲查詢字符串。通過POST,它以標準的x-www-form-urlencoded風格在請求實體中發送。如果您想在POST正文中發送JSON,請使用JSON.stringify

您的服務器端函數應返回一個可序列化的類。 .NET會爲你輸出適當的JSON。

[WebMethod] 
[ScriptMethod(UseHttpGet = true)] 
public PolicyGeneratorResponse PolicyGenerator(string fileName){ 
     return new PolicyGeneratorResponse(...); 
} 

... 

class PolicyGeneratorResponse { 
    public string res; 
} 
0

嘗試增加一個數據類型來請求:

$.ajax(signingURI + "?fileName=" + fileName, { dataType: 'json' }) 
     .done(function (data){ 
}); 
+0

我的猜測是,這將起作用,不過最好先修復服務器以將數據設置爲JSON。 – jfriend00

+0

嗨,不,輸入失敗函數,錯誤是返回的字符串(「<?xml version =」1.0「encoding =」utf-8「?> {「res」:「asdasda」}「) –

+0

噢,在這種情況下,問題在於您的Web服務正在返回一個XML文檔。 :P你能更新網絡服務嗎?[WebMethod]專門用於返回XML。 – admanb

0

東西是很奇怪的事情。似乎web服務確實返回JSON,但是當我使用.done回調時,我無法讀取它。

$.ajax({ 
     type: "POST", 
     url: signingURI, 
     data: "{'fileName':'" + encodeURI('test.jpg') + "'}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function(msg){ 

在其他屬性中使用成功回調給了我JSON。很奇怪,還是它?

相關問題