你的錯誤是,試圖手動構建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
的部分。所有行都作爲註釋包含在演示中。
如果你創建一個''form method =「POST」>'並且以這種方式嘗試?它會返回任何東西嗎? – pimvdb 2011-02-25 17:08:31