0

我正在尝试使用 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 进入错误场景

状态:200 状态代码:函数(地图){状态文本:“解析器错误”

我已经在这里阅读了解释,但我不能使用 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,我可以读取我的调用是OPTIONS http://localhost:11523/Service1.svc/GetBidObject?{%22id%22:%220%22} HTTP/1.1使用 chrome。在 IE Fiddler 中什么也没检测到。ajax 调用从未完成......我真的不明白。

4

1 回答 1

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 将正确地 serailizeparam并生成 URL:

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

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

于 2012-06-26T16:30:54.253 回答