gpt4 book ai didi

ajax - jQuery AJAX 响应始终不返回任何内容

转载 作者:行者123 更新时间:2023-12-01 06:30:50 25 4
gpt4 key购买 nike

无论该函数是否存在,甚至整个 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 specification属性名称也必须用双引号引起来。

如果文件名包含一些特殊字符,您可能会遇到下一个问题。例如,如果出现

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 浏览器都对该函数具有 native 支持,并且该函数运行速度非常快。

顺便说一句,在使用 JSON.stringify 的情况下,您可以轻松调用具有非常复杂的数据结构(类)作为参数而不仅仅是字符串的 Web 服务方法。

已更新:再提醒一下,以减少可能的误解。如果您稍后决定使用 HTTP GET 而不是 HTTP POST 来调用 Web 方法,则必须更改 data 参数

JSON.stringify({ FileName: filename })

{ FileName: JSON.stringify(filename) }

更新2:您可以下载this在发布答案之前,我用 Visual Studio 2010 项目测试了所有内容。我将 .NET 3.5 的 web.config 作为“Web-3.5.config”包含在内。 default.htm 中包含的所有不同的注释 data 值。如果您想使用 HTTP GET 进行测试,您应该取消 web.config 中允许 HttpGet 的部分的注释,并使用具有 UseHttpGet = trueScriptMethod 。所有行都作为注释包含在演示中。

关于ajax - jQuery AJAX 响应始终不返回任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5119977/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com