[英]jQuery AJAX response always returns nothing
无论该功能是否存在,或者甚至整个Web服务文件都不存在,以下代码将返回空响应:
$.ajax({
url: "/ws.asmx/HelloWorld"
, type: "POST"
, contentType: 'application/json; charset=utf-8'
, data: '{ FileName: "' + filename + '" }'
, dataType: 'json'
, success: function (data) {
}
});
为什么是这样?
另外,可能值得注意的是, $.load()
可以正常工作!
您的错误是您尝试手动构造JSON数据并以错误的方式执行此操作:
'{ FileName: "' + filename + '" }'
您应该至少将代码修复为以下内容
'{ "FileName": "' + filename + '" }'
因为对应于JSON规范,所以属性名称也必须用双引号引起来。
如果filename
包含一些特殊字符,您可能会遇到下一个问题。 例如,在
var filename = '"C:\\Program Files"'; // the '\' must be escaped in the string literal
您应该具有对应的JSON字符串作为数据
'{ "FileName": "\\"C:\\\\Program Files\\"" }'
如因“\\”和““”对应的JSON数据必须进行转义。它看起来难治,所以我stricly建议您构造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服务方法。
更新 :再次提醒减少可能的误会。 如果您以后决定使用HTTP GET而不是HTTP POST来调用Web方法,则必须将data
参数更改为
JSON.stringify({ FileName: filename })
至
{ FileName: JSON.stringify(filename) }
更新2 :您可以下载此 Visual Studio 2010项目,在发布答案之前,该项目用于测试所有内容。 我将.NET 3.5的web.config包含为“ Web-3.5.config”。 default.htm文件中包含所有不同的注释data
值。 如果要使用HTTP GET进行测试,则应取消注释web.config中允许HttpGet并使用UseHttpGet = true
ScriptMethod
部分。 所有行均作为注释包含在演示中。
只是尝试使用:
$.getJSON("/ws.asmx/HelloWorld", function(data){
alert(data);
});
检查是否返回数据。
确保已正确加载了jquery.js文件。
服务是否返回值? 如果没有,它将只是POST而不会给您任何回报,因为没有数据可看...
如果要监视错误,可以添加错误回调
$.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请求,不会调用此处理程序。
我在某处读到,POST的contentType标头必须为:
xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
而且我盲目地使用它:它总是有效的。
-皮特
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.