JQuery AJAX,错误状态代码:200,状态文本:parserorro |好

时间:2011-04-04 15:40:33

标签: c# asp.net visual-studio-2008 jquery

这是一个有趣的情况,我在。 我正在使用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

当我使用Jquery 1.5时,我得到: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);
                //...
            }
        }

但我不知道它是否能正常工作,或者这个方法可能还有其他问题。我也不知道如何从这里访问响应数据。 但我主要担心的是找出导致我网站出现问题的原因。

更新:今天在谷歌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

7 个答案:

答案 0 :(得分:3)

这个问题并不是很容易用fiddler解决的,尽管它是一个很棒的工具。

我认为这里描述的问题,现在使用完整的事件。 有一些问题将在jQuery 1.5.1中解决 参见:

jQuery returning "parsererror" for ajax request

因为它被张贴在那里,

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]);
        }

答案 1 :(得分:2)

您应该使用Fiddler - 优秀的网络调试代理。在它的帮助下,您可以监视服务器和客户端之间的所有通信

答案 2 :(得分:1)

不确定这是否有帮助,但是ajax()API指定他们已经更改了success()回调函数的返回对象。这是来自jQuery API

  

从jQuery 1.5开始,成功回调函数接收一个“jqXHR”对象(在jQuery 1.4中,它接收到XMLHttpRequest对象)。但是,由于JSONP和跨域GET请求不使用XHR,因此在这些情况下,传递给成功回调的jqXHR和textStatus参数是未定义的。

如果它有帮助,你可以在这里找到它......

jQuery $ajax API

我遇到了类似的问题,无法从任何回调函数中提取JSON对象。

答案 3 :(得分:1)

我认为你可以在This Link

中找到这个问题的答案

答案 4 :(得分:0)

我也遇到了这个问题但在PHP中我放入了'remote.php'

`echo $msg`' 
出现问题。当我使用json_encode()时:

echo json_encode($msg);

然后一切正常。

这很奇怪,因为我从状态为“OK”的服务器得到响应,因此函数“success”应该不是“错误”。在“成功”中我只有

success: function(res){ console.log(res);}

答案 5 :(得分:0)

在我的情况下(使用“jquery 1.9.1”时),添加dataType:“json”解决了“parsererror”问题(我之前没有指定dataType并且发生了问题)。

答案 6 :(得分:0)

我遇到了类似的问题。

我用POST方法调用了AJAX REST服务并返回:

参数[0] =状态200(确定)| arguments [1] =“parseerror”| arguments [2] =“无效的JSON:”

我的服务器方法返回“void”值。为解决此问题,我将其替换为布尔值,例如。