以下代码返回空白响应,无论函数是否存在,甚至完全是Web服务文件:
$.ajax({
url: "/ws.asmx/HelloWorld"
, type: "POST"
, contentType: 'application/json; charset=utf-8'
, data: '{ FileName: "' + filename + '" }'
, dataType: 'json'
, success: function (data) {
}
});
为什么会这样?
另外,值得注意的是,$.load()
工作正常!
答案 0 :(得分: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数据,因为'\'和'''必须被转义。它看起来很难。所以我强烈建议你构建尊重JSON字符串来自JSON.stringify的json2.js函数。然后代码将是
$.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
的下一个优点是,最现代的Web浏览器具有原生支持该功能,并且功能可以非常快速地工作。
顺便说一下,如果使用JSON.stringify
,您可以轻松调用具有非常复杂的数据结构(类)作为参数的Web服务方法,而不仅仅是字符串。
更新:还有一个减少可能的误解的remrk。您稍后使用HTTP GET而不是HTTP POST来调用Web方法,您必须从
更改data
参数
JSON.stringify({ FileName: filename })
到
{ FileName: JSON.stringify(filename) }
更新2 :在我发布回答之前,您可以下载this Visual Studio 2010项目。我在.NET 3.5中包含了“Web-3.5.config”web.config。 default.htm工作中包含的所有不同注释data
值。如果您希望使用HTTP GET进行make测试,则应取消注释web.config中允许HttpGet并使用ScriptMethod
UseHttpGet = true
的部分。所有行都作为注释包含在演示中。
答案 1 :(得分:2)
只是尝试使用:
$.getJSON("/ws.asmx/HelloWorld", function(data){
alert(data);
});
检查您是否收到了数据。
答案 2 :(得分:1)
答案 3 :(得分:0)
确保已正确加载jquery.js文件。
答案 4 :(得分:0)
服务是否返回值?如果没有,它只会POST而不会给你任何回报,因为没有数据可以看......
答案 5 :(得分: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请求。
答案 6 :(得分:0)
我在某处读到POST 的内容类型标题必须 :
xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
我盲目地使用它:它总是有效。
- 皮特