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

标签 ajax web-services jquery asp.net-3.5

无论该函数是否存在,甚至整个 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/

相关文章:

javascript - $http ajax AngularJS POST 在 PHP 中返回 undefined index

javascript - jQuery 文件上传 - 进行逐一上传

javascript - 使用 FOSJsRoutingBundle 和 Ajax 加载 html 内容时的延迟(路由参数 {id})

java - 如何根据WSDL开启验证-spring boot和spring-ws

jquery - 使用 jQuery 中的类将元素包装在另一个元素中

sql - 如何将 Gatsby.js 链接到我的 Express 服务器

c# - SharePoint GetListItems - 获取所有列,按集列表 ID 过滤。 C#

java - Jersey REST Web 服务在 Struts 2 中不工作

(document).ready() 中的 javascript 函数不执行

javascript - 当放下打开文本区域 | jQuery