繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM