3

我在 Visual Studio 2010 中创建了两个项目,一个是 Web 服务,另一个是 Web 应用程序,我在 Web 服务上有一个方法如下:

`[OperationContract]
    [WebInvoke(Method = "GET",
        ResponseFormat = WebMessageFormat.Json,
        BodyStyle = WebMessageBodyStyle.Wrapped,
        UriTemplate = "json/getData")]
    List<Objects> TestCall();`

运行服务后,我可以愉快地输入 URL 以获取 JSON 响应:

http://localhost:17258/RestService.svc/json/getData

结果是

{"TestCallResult":[{"id":1,"name":"Title"}, {"id":2,"name":"Title"},{"id":3,"name":"Title"},{"id":4,"name":"Title"}]}

但是,在我的 Web 应用程序中,当我尝试进行此 Ajax 调用以获取此响应时,我从调用中获得了成功,但 JSON 为空,这是我的 ajax 调用:

`$.ajax({
                url: "http://localhost:17258/RestService.svc/json/getData",
                type: "GET",
                mimeType: "application/json",
                dataType: "json",
                cache: false,
                success: function (json, status) {
                    alert("Success JSON=" + json + ", status=" + status);
                    var obj = jQuery.parseJSON(json);
                    for (var i = 0; i <= obj.length; i++) {
                        alert(obj[i].id);
                    }
                }
            });`                

我在 FireFox 中尝试并且 json 变量返回为 null,在 IE 调试器中进行调试时,我可以向对象添加一个监视,并且可以看到对象下面有数组,我需要使用 json.TestCallResult 代替还是有任何其他人都看到了 IE 和 FireFox 之间的这种差异,或者有人可以说不要再做菜鸟了……

谢谢

4

4 回答 4

0

您的 ajax url 应该与您的 html 的 url 具有相同的 host:port。

于 2012-05-03T13:17:30.373 回答
0
$.ajax({
                url: "http://localhost:17258/RestService.svc/json/getData",
                type: "GET",
                dataType: "json",
                cache: false,
                success: function (obj) {
                    for (var i = 0; i <= obj.length; i++) {
                        alert(obj[i].id);
        }
     }
});

尝试这个

于 2012-05-04T07:47:12.007 回答
0

在您的成功回调中,您已经获得了一个 json 对象。如果您尝试再次使用 $.parseJSON 解析它,则结果为空。http://jsfiddle.net/H4v8G/

于 2012-05-03T13:41:21.190 回答
0

您需要查看json.d而不是json.

响应数据包含在.d属性中,而不是直接包含在返回的对象中。

这发生在 ASP.NET 3.5 及更高版本中。

于 2012-05-03T13:53:44.973 回答