我使用$ .getJSON()通过jQuery调用我在本地IIS上托管的WCF服务。
查看我的java脚本代码
getTestRunsByProject: function (projectKey) {
var deferred = $.Deferred();
var link = scnfg.ServiceURL + '/GetTestRunsForProject/' + projectKey + '?callback=?';
$.getJSON(link, function (results) {
deferred.resolve(results);
});
return deferred.promise();
},
我附加了哪些?callback =?在服务URL的末尾,因为我在带有红色文本的firebug控制台选项卡中获得200状态代码的空响应;虽然服务很实用。
当使用字符串修改url时?callback =?然后我没有在firebug控制台选项卡中获取服务调用条目,而是在firebug的Net选项卡中找到服务调用详细信息,其中包含服务所需的响应。
我使用以下脚本代码
调用此函数$.when(serviceapi.getTestRunsByProject("W6")).then(function (data) {
if (data.length > 0) {
lstTestRuns = data;
}
});
现在有?回调=?当在firebug Net选项卡中检查时,它确实返回来自服务调用的响应,但是$ .getJSON的成功回调没有被触发,即它不返回$ .Deffered()对象。并且使用?callback =?为什么服务呼叫条目不会记录在firebug控制台选项卡中。
任何人都可以帮忙吗? 在此先感谢。
答案 0 :(得分:0)
用?回调=?我正在实现对我的服务的跨域调用,但是从服务端我返回了普通的json格式结果。所以在这种情况下,服务客户端以JSONP格式请求数据,其中我的服务返回JSON格式的数据。根据jfriend00的建议,我搜索了如何实现JSONP机制&找到了有用的this链接。
参考此链接,我知道我需要为我的服务端点设置绑定配置以启用corss域调用。为此,我将以下标记添加到我的服务配置文件
<bindings>
<webHttpBinding>
<binding name="webHttpBindingWithJSONP" crossDomainScriptAccessEnabled="true" />
</webHttpBinding>
</bindings>
并更新我的端点定义以使用此绑定配置,如下所示
<endpoint address="" binding="webHttpBinding" contract="IAuFaitDashboard" bindingConfiguration="webHttpBindingWithJSONP" behaviorConfiguration="MySetting">
然后我的java脚本getTestRunsByProject函数按预期开始执行。