我构建了一个生成JSON的WCF服务。我想创建一个使用此Web服务的外部网站。目前我正在通过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":"您请求了产品123"}
现在我尝试使用JQuery语句getJSON接收此结果。但我没有看到任何结果。
我的问题是如何才能获得这些简单数据?
其次,如何将数据(使用javascript)发布回wcf服务是否也可以使用json?
-edit - :
我现在已经更新了我的代码并将其放入我的文档就绪函数中,该函数位于<head> <script>
....在我的页面上:
$.getJSON(
'http://myownaddress/blabla.svc',
function(data)
{
alert(data.JSONDataResult);
});
但是这不会给出警告结果。它甚至没有发出警报。除此之外,在函数中我需要给出一个id的参数,所以例如123(看上面的文字)不要我把它放在函数中也?
答案 0 :(得分:2)
要获取数据getJSON()
:
$.getJSON(
'http://myownaddress/blabla.svc/',
function(data) {
alert(data.JSONDataResult);
}
);
要发布数据,您可以使用this:
$.post('http://myownaddress/postservice.svc', function(data) {
$('.result').html(data);
});
或this(如果您需要更多控制权):
$.ajax({
type: 'POST',
url: url,
data: data,
success: success,
dataType: dataType
});
您也可以使用ajax来获取数据而不是getJSON
方法。
<强>更新强>
尝试使用ajax方法,因为它可以提供更多控制:
$.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)}
});
另外,如果你使用firefox,请查看firebug扩展程序,它会对你有很大帮助。 如果您使用chrome,请使用chrome developer tools。
答案 1 :(得分: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中指定的callBack方法将结果注入响应流。
答案 2 :(得分:0)
你有这样的代码吗?
$.getJSON(
'http://myownaddress/blabla.svc/',
function(result) {
alert(result.JSONDataResult);
}
);
记住getJSON
不会立即返回数据,你必须在回调函数中使用结果。
答案 3 :(得分:0)
为什么要更改网址?
$。的getJSON( 't t p://myownaddress/blabla.svc'==&gt; 't t p://myownaddress/blabla.svc/123', 功能(数据) { 警报(data.JSONDataResult); });