[英]JQuery AJAX, Error Status code: 200, Status Text: parserorro | OK
这是我所处的一个有趣的情况。我正在使用VS 2008和.Net Framework 3.5开发一个ASP.Net网站,我想在测试页面中使用jquery ajax,代码如下所示:
C# Method
[WebMethod]
public static string test()
{
return "Server Response" ;
}
$(document).ready(function() {
$("#myDiv").click(function() {
$.ajax({
type: "POST",
url: "AjaxTest.aspx/test",
data: "",
contentType: "application/json;charset=utf-8",
dataType: "json",
success: function(msg) {
// Replace the div's content with the page
// method's return.
alert(msg.d);
},
error: function(result){
alert("error occured. Status:" + result.status
+ ' --Status Text:' + result.statusText
+ " --Error Result:" + result);
}
});
});
});
所以当我像这样使用Jquery 1.4.4时:
我明白了: Status 200; Status Text: OK
Status 200; Status Text: OK
当我使用Jquery 1.5时,我得到: Status 200; Status Text: Parsererror
Status 200; Status Text: Parsererror
所以我在Visual Studio中创建了一个新的WebSite,在那里复制和填充代码,它工作得很好!!!! 我无法弄清楚导致问题的原因。 我也使用了带参数的方法,并设置了数据: "{}"
,并完全删除数据,但似乎没有任何效果。
我不知道是否必须对我正在使用的DevExpress组件做任何事情。
我也找到了一个很好的答案,正在使用这样的完整方法:
complete: function(xhr, status) {
if (status === 'error' || !xhr.responseText) {
alert("Error");
}
else {
var data = xhr.responseText;
alert(data);
//...
}
}
但我不知道它是否能正常工作,或者这种方法可能还有其他问题。 我也不知道如何从这里访问响应数据。 但我主要担心的是找出导致我网站问题的原因。
更新:今天在Google Chrome控制台中我注意到JQuery 1.5存在一些语法问题,如下所示:
未捕获的SyntaxError:意外的标记<jQuery.jQuery.extend.globalEvaljquery.js:593 jQuery.ajaxSetup.converters.text scriptjquery.js:7175 ajaxConvertjquery.js:7074 donejquery.js:6622 jQuery.ajaxTransport.send.callbackjquery.js:7441
虽然这是一个很好的工具,但是这个问题并不是很容易用fiddler解决的。
我认为这里描述的问题,现在使用完整的事件。 有一些问题将在jQuery 1.5.1中解决。请参阅:
因为它被张贴在那里,
complete: function (xhr, status) { if (status == 'error' || !xhr.responseText) { handleError(); } else { var data = xhr.responseText; //... } }
虽然有趣的是 - 当我查询亚马逊的服务时,这适用于我的jsonp数据(代码亚马逊基于网上的其他一些帖子我也没有参考)ala:
//resp is simple a placeholder for autocomplete's response which I will need to call on a global scope. var resp; var filter; $(document).ready(function () { //http://completion.amazon.com/search/complete?method=completion&q=halo&search-alias=videogames&mkt=1&x=updateISSCompletion&noCacheIE=1295031912518 filter = $("#productFilter").autocomplete({ source: function (request, response) { resp = response; $.ajax({ url: "http://completion.amazon.com/search/complete", type: "GET", cache: false, dataType: "jsonp", success: function (data) { //data[1] contains an array of the elements returned from the service. //use .map to enumerate through them. response($.map(data[1], function (item) { //debugger; return { label: item, value: item, id: item} })) }, data: { q: request.term, "search-alias": "videogames", mkt: "1", callback: '?' } }); }, minLength: 2, select: function (event, ui) { //$('#browseNode option:first').attr('selected', 'selected'); alert('selected'); }, open: function () { $(this).removeClass("ui-corner-all").addClass("ui-corner-top"); }, close: function () { $(this).removeClass("ui-corner-top").addClass("ui-corner-all"); } }); }); //this is the method that will be called by the jsonp request function updateISSCompletion() { alert('updateiss'); resp(completion[1]); }
您应该使用Fiddler - 一个出色的Web调试代理。 有了它的帮助,您可以监视服务器和客户端之间的所有通信
不确定这是否有帮助,但是ajax()API指定他们已经更改了success()回调函数的返回对象。 这是来自jQuery API
从jQuery 1.5开始,成功回调函数接收一个“jqXHR”对象(在jQuery 1.4中,它接收到了XMLHttpRequest对象)。 但是,由于JSONP和跨域GET请求不使用XHR,因此在这些情况下,传递给成功回调的jqXHR和textStatus参数是未定义的。
你可以在这里找到它,如果它有帮助...
我遇到了类似的问题,我无法从任何回调函数中提取JSON对象。
我想你可以在这个链接中找到这个问题的答案
我也有这个问题,但在PHP中我输入'remote.php'
:
`echo $msg`'
出现问题。 当我使用json_encode()
:
echo json_encode($msg);
一切正常。
这很奇怪,因为我从状态为“OK”的服务器得到响应,因此函数“success”应该不是“错误”。 在'成功'我只有
success: function(res){ console.log(res);}
在我的情况下(当使用“jquery 1.9.1”时),添加dataType:“json”解决了“parsererror”问题(我之前没有指定dataType并且发生了该问题)。
我遇到了类似的问题。
我用POST方法调用了AJAX REST服务并返回:
arguments [0] = status 200(OK)| arguments [1] =“parseerror”| arguments [2] =“无效的JSON:”
我的服务器方法返回“void”值。 为解决此问题,我将其替换为布尔值,例如。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.