2011-02-25 69 views
1

下面的代碼返回一個空響應無論功能是否存在,或者甚至是Web服務完全檔案:jQuery的Ajax響應始終沒有返回

$.ajax({ 
    url: "/ws.asmx/HelloWorld" 
    , type: "POST" 
    , contentType: 'application/json; charset=utf-8' 
    , data: '{ FileName: "' + filename + '" }' 
    , dataType: 'json' 
    , success: function (data) { 

    } 
}); 

這是爲什麼?

此外,值得注意的是,$.load()工作正常!

+0

如果你創建一個''form method =「POST」>'並且以這種方式嘗試?它會返回任何東西嗎? – pimvdb 2011-02-25 17:08:31

回答

2

只是嘗試使用:

$.getJSON("/ws.asmx/HelloWorld", function(data){ 
    alert(data); 
}); 

檢查,如果你找回數據。

+0

我試過這個,反應仍然是空白的。警報聲明「null」 – Curt 2011-02-25 16:59:40

+0

你在你的螢火蟲中得到了什麼。你有好的迴應嗎? – alexl 2011-02-25 17:01:12

+0

好的迴應只是空白? – Curt 2011-02-28 12:00:31

0

確保您已正確加載jquery.js文件。

+0

之前的編碼提供了其他jQuery的動作,所以我敢肯定這工作正常 – Curt 2011-02-25 17:01:36

0

該服務是否返回一個值?如果你想觀看的錯誤如果不是,它只是POST,而不是給你帶回點什麼,因爲沒有數據看...

+0

該服務應該返回字符串「Hello World」,但它不。另外,如上所述,如果我將服務更改爲「HelloWorld123」,則不會返回任何錯誤。我習慣看到一個.NET錯誤返回,指出「無法找到Web服務」或類似的東西。 – Curt 2011-02-25 17:00:32

0

,你可以添加一個錯誤回調

$.ajax({ 
    url: "/ws.asmx/HelloWorld" 
    , type: "POST" 
    , contentType: 'application/json; charset=utf-8' 
    , data: '{ FileName: "' + filename + '" }' 
    , dataType: 'json' 
    , success: function (data) { 

    } 
    , error: function (a, b, c) { 

    } 
}); 

從jQuery的:

error(jqXHR, textStatus, errorThrown)Function 

A function to be called if the request fails. The function receives 

三個參數:jqXHR(jQuery中 1.4.x,XMLHttpRequest)對象,描述發生的錯誤 的類型的字符串,以及發生的異常對象的可選 。 第二個參數 的可能值(除了null)是「超時」, 「錯誤」,「中止」和「parsererror」。 這是一個Ajax事件。從jQuery 1.5開始,錯誤設置可以接受一組函數。每個函數將依次調用 。注意:此處理程序 未針對跨域腳本 和JSONP請求調用。

+0

我嘗試在error()函數中放置一個警報,但沒有出現警報,因此我認爲這是一個成功響應,但是空白! – Curt 2011-02-28 12:01:22

0

我讀的地方,將contentType頭的POST 必須是:

 xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

,我盲目地使用它:它總是奏效。

- 皮特

4

你的錯誤是,試圖手動構建JSON數據,並在錯誤的方式做到這一點:

'{ FileName: "' + filename + '" }' 

你至少應該修復代碼以下

'{ "FileName": "' + filename + '" }' 

因爲對應的JSON specification屬性名稱也必須雙引號。

如果filename有一些特殊字符,你可以有下一個問題。例如,在

var filename = '"C:\\Program Files"'; // the '\' must be escaped in the string literal 

情況下,你應該已經作爲數據對應的JSON字符串

'{ "FileName": "\\"C:\\\\Program Files\\"" }' 

的,因爲「\」和「「」對應的JSON數據必須進行轉義。它看起來難治,所以我stricly建議您構建JSON字符串相對於從json2.jsJSON.stringify功能,然後將代碼將

$.ajax({ 
    type: "POST", 
    url: "ws.asmx/HelloWorld", 
    data: JSON.stringify({ FileName: filename }), 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function (data) { 
     alert(data.d); 
    }, 
    error: function (XMLHttpRequest, textStatus, errorThrown) { 
     alert("Error Occured!" + " | " + XMLHttpRequest.responseText + 
       " | " + textStatus + " | " + errorThrown); 
    } 
}); 

這簡單明瞭。使用JSON.stringify的下一個優點是最現代的網絡瀏覽器具有原生支持該功能和該功能非常快速地工作。

順便說一下,在使用JSON.stringify的情況下,你可以很容易地調用Web服務方法,它具有非常複雜的數據結構(類)作爲參數,而不僅僅是字符串。

已更新:還有一位潛在客戶可以減少可能的誤解。這以後deceide使用HTTP GET而不是HTTP POST調用Web方法,你必須將data參數從

JSON.stringify({ FileName: filename }) 

改變

{ FileName: JSON.stringify(filename) } 

更新2:您可以下載this在我發佈我的答案之前,我用來測試所有Visual Studio 2010項目。我作爲「Web-3.5.config」包含了.NET 3.5的web.config。所有不同的評論data值包含在default.htm工作中。如果你想用HTTP GET進行測試,你應該取消註釋web.config中允許HttpGet並且使用ScriptMethod具有UseHttpGet = true的部分。所有行都作爲註釋包含在演示中。

+0

感謝您的回覆@Oleg,但我不確定這是問題的原因。 FileName實際上是一串字母數字字符,當在FireFox FireBug中查看POST請求時,它會顯示POST請求,併發送正確的JSON數據。 – Curt 2011-02-28 09:11:35

+0

@Curt:您看到哪些數據發佈?您可以在http://www.jsonlint.com/中對字符串進行垂直。像'{FileName:'bla'}'或'{'FileName':'bla'}'這樣的字符串是** NOT **有效的JSON。字符串'{「FileName」:「bla」}'是正確的。您將類似JSON的JavaScript語法與[在此](http://www.json.org/)中描述的數據交換格式JSON混淆。 ASMX Web服務只接受正確的JSON數據。 – Oleg 2011-02-28 09:49:51

+0

@Curt:你試過我的建議嗎?我在寫回答之前就做了。如果它幫助你,我可以上傳我使用的測試VS2010項目C#並將URL發佈給它。或者你對這個問題沒有興趣? – Oleg 2011-02-28 20:56:54