【发布时间】:2014-03-20 15:54:16
【问题描述】:
我正在使用 $.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 状态代码的空响应;虽然服务正常。
当使用字符串 ?callback=? 修改 url 时然后我没有在 firebug 控制台选项卡中获得服务调用条目,而是在 firebug 的 Net 选项卡中找到了服务调用详细信息,其中包含来自服务的所需响应。
我正在使用以下脚本代码调用此函数
$.when(serviceapi.getTestRunsByProject("W6")).then(function (data) {
if (data.length > 0) {
lstTestRuns = data;
}
});
现在使用 ?callback=?它确实从服务调用返回响应当在 firebug Net 选项卡中检查时,但 $.getJSON 的成功回调没有被触发,即它不返回 $.Deffered() 对象。使用 ?callback=?这就是为什么服务调用条目没有记录在 firebug 控制台选项卡中的原因。
有人可以帮忙吗? 提前致谢。
【问题讨论】:
-
您是否安装了错误处理程序并查看 jQuery 是否报告了特定的错误情况?您的 Web 服务是否特别支持将结果打包到 javascript 函数调用中的 JSONP?
-
另外,您不需要在这里创建自己的延迟对象。
$.getJSON()返回一个 Promise 兼容对象,该对象将自动被 ajax 调用解析或失败。 -
@jfriend00 感谢您的回复。我已将属性添加到服务合同以返回 json 格式的响应,如下所示 [OperationContract] [WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "GetTestRunsForProject/{projectKey}")] List
GetTestRunsForProject(string projectKey);请告诉我是否需要做更多的事情? -
JSONP 格式不同于 JSON。您必须明确知道客户端正在请求哪一个并生成正确的。在 URL 中使用
callback=通常意味着 JSONP 用于跨域使用。 -
我没有特别要求 JSONP 格式使用 callback=。但是,当我删除它时,我会得到空的响应,正如我在问题陈述中已经描述的那样。所以现在如果我只需要通过删除 callback= 来回复 JSON 格式,那么我怎样才能实现我的服务调用以返回所需的响应。否则,如果我需要使用 JSONP,那么如何添加对 WCF 服务的支持?