我的jQuery.ajax()parsererror是什么原因?

时间:2012-06-26 16:16:57

标签: javascript .net ajax json web-services

我正在尝试使用javascript $ .Ajax调用从Web服务获取JSON。

<script type="text/javascript">
    $(function () {
        $("#" + "@Model.BidObjectId").submit(function () {
            alert("Test");
            var param = { 'id': "@Model.BidObjectId" };
            $.ajax({
                url: "http://localhost:11523/Service1.svc/GetBidObject",
                dataType: "jsonp",
                contentType: "application/json;charset=utf-8",
                type: "GET",
                data: JSON.stringify(param),
                success: function (msg) {
                    alert("success");
                    if (msg != null) {
                        return msg.URL;
                    }
                },
                error: function (msg2) {
                    alert(msg2);
                }
            });
            return false;
        });
    });
</script>

我总是使用parsererror进入错误场景

  

status:200 statusCode:function(map){statusText:“parsererror”

我已经阅读了解释here但我不能使用JSON,因为这会创建一些OPTION调用。我已经尝试将POST更改为GET,以几种不同的方式返回数据(创建类等)但我似乎无法弄清楚问题是什么。只有JSONP的解决方案似乎同意进行正确的GET或POST。其他解决方案甚至都找不到我的网络服务。

以下是我的网络服务的代码:

        [OperationContract]
        [WebInvoke(Method = "GET", UriTemplate = "/GetBidObject?id={id}", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
        string[] GetBidObject(string id);

        public string[] GetBidObject(string id)
        {
            BidObject bidobject = new BidObject() { BidObjectId = 1, Title = "callback" };

            JavaScriptSerializer ser = new JavaScriptSerializer();
            string result =  ser.Serialize(bidobject);
            List<string> listResult = new List<string>();
            listResult.Add(result);
            return listResult.ToArray(); 
        }

我不使用ASP.NET但使用Razor。

[编辑]

如果我在Fiddler中通过json更改jsonp,我可以使用chrome读取我的OPTIONS http://localhost:11523/Service1.svc/GetBidObject?{%22id%22:%220%22} HTTP/1.1调用。在IE Fiddler中没有检测到任何东西。 ajax调用从未完成......我真的不明白。

1 个答案:

答案 0 :(得分:0)

JSON和查询字符串是两回事。通过GET(或POST)发送数据时,您不需要使用JSON。

$.ajax({
    url: "http://localhost:11523/Service1.svc/GetBidObject",
    dataType: "jsonp",
    type: "GET",
    data: param,
    success: function (msg) {
        alert("success");
        if (msg != null) {
            return msg.URL;
        }
    },
    error: function (msg2) {
        alert(msg2);
    }
});

jQuery将正确地搜索param并生成URL:

http://localhost:11523/Service1.svc/GetBidObject?id=123&callback=jquery1234

然后,您只需从后端的查询字符串中读取id值即可。