0

我构建了一个生成 JSON 的 WCF 服务。我想制作一个使用此网络服务的外部网站。现在我正在通过 IIS 通过 LAN 执行 WCF 服务,因此我可以通过访问http://myownaddress/blabla.svc/连接到该服务

我试图学习一些 json 并从我的服务中获得一些结果。

例如,如果我想使用这种方法:

        [OperationContract]
        [WebInvoke(Method = "GET",
            ResponseFormat = WebMessageFormat.Json,
            BodyStyle = WebMessageBodyStyle.Wrapped,
            UriTemplate = "json/{id}")]
        string JSONData(string id);

我会去http://myownaddress/blabla.svc/json/123 结果我得到: {"JSONDataResult":"You requested product 123"}

现在我尝试使用 JQuery 语句 getJSON 接收这个结果。但我没有看到任何结果。

我的问题是我怎样才能得到这个简单的数据?

其次,如何将数据(使用 javascript)发布回 wcf 服务,是否也可以使用 json?

-编辑-:

我现在已经更新了我的代码并将其放入我的文档就绪函数中,该函数位于<head> <script>我页面上的 .... 之间:

$.getJSON(
           'http://myownaddress/blabla.svc',
            function(data) 
            {
               alert(data.JSONDataResult);
            });

但这不会给出结果警报。它甚至不发出警报。除此之外,在函数中我需要提供一个 id 参数,例如 123(请参阅上面的文本)我是否也需要将它放入函数中?

4

4 回答 4

2

To get data use getJSON():

$.getJSON(
    'http://myownaddress/blabla.svc/',
    function(data) {
        alert(data.JSONDataResult);
    }
);

To post data you can use this:

$.post('http://myownaddress/postservice.svc', function(data) {
  $('.result').html(data);
});

or this (if you need more control):

$.ajax({
  type: 'POST',
  url: url,
  data: data,
  success: success,
  dataType: dataType
});

You can also use the ajax for getting the data instead of the getJSON method .

UPDATE:

try using ajax method as it gives you more control:

 $.ajax({
      type: 'GET',
      url: "http://myownaddress/blabla.svc/json/123",
      success: function(data){alert(data)},
      dataType: "json",
      complete: function(data){alert(data)},
      error: function(jqXHR, textStatus, errorThrown){alert(errorThrown)}
    });

Also, if you use firefox, check out firebug extension, it will help you greatly. If you use chrome then use chrome developer tools.

于 2012-07-25T10:12:59.577 回答
1

为了让您使用 Jquery 从网站外部的 WCF 服务获取 json 数据,您需要使用 JSONP。

您可以执行如下所示的调用:

$.ajax({
                        url: "http://myownaddress/blabla.svc/",
                        dataType: "jsonp",
                        type: "GET",
                        timeout: 10000,
                        data: null,
                        jsonpCallback: "MyCallback",
                        success: function (data, textStatus, jqXHR) {                           
                            alert(action.toLowerCase());
                        },
                        error: function (jqXHR, textStatus, errorThrown) {alert('error is:' + errorThrown);
                        },
                        complete: function (jqXHR, textStatus) {alert('complete');
                        }
                    });

当您想使用 Javascript 执行跨域调用时,使用 JSONP。

此外,您的 WCF 服务应该兼容处理 JSONP 调用,方法是使用 URL 中指定的回调方法将结果注入响应流。

于 2012-07-25T15:21:20.010 回答
0

你为什么改变你的网址?

$.getJSON('http://myownaddress/blabla.svc' ==> 'http://myownaddress/blabla.svc/123', function(data) { alert(data.JSONDataResult); });

于 2012-07-25T11:23:15.817 回答
0

你有这样的代码吗?

$.getJSON(
    'http://myownaddress/blabla.svc/',
    function(result) {
        alert(result.JSONDataResult);
    }
);

记住getJSON不会立即返回数据,你必须在回调函数中使用结果。

于 2012-07-25T10:07:35.493 回答