$ .getJSON不执行WCF服务调用的成功回调

时间:2014-03-20 06:38:30

标签: jquery wcf getjson

我使用$ .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控制台选项卡中。

任何人都可以帮忙吗? 在此先感谢。

1 个答案:

答案 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函数按预期开始执行。