我有以下ajax调用,从www.DomainName.com上的ssl页面调用(例如https://www.domainname.com/caller.aspx):
$.ajax({
type: "GET",
url: "https://services.DomainName.com/myService.svc/GetCustomers",
data: { accNo: accno, count: "35" },
dataType: "jsonp",
error: function (xhr, status, error) {
var test = "";
var test2 = xhr;
var test3 = stat;
var test4 = error;
},
success: function (data) {
var suggestions = [];
$.each(data, function (i, val) {
suggestions.push(val);
});
add(suggestions);
}
})
不会调用成功函数和错误函数。
但是当我将服务URL更改为不使用ssl时,调用成功并返回客户列表: http://services.DomainName.com/myService.svc/GetCustomers
如果我将https://services.DomainName.com/myService.svc/GetCustomers直接粘贴到浏览器的地址栏中,则会返回一个客户列表。这是jasonp调用,在通过SSL调用时不返回结果(也不是错误)。
有什么想法吗?
答案 0 :(得分:0)
正如所有遇到此问题的人都没有像我一样努力解决这个问题,答案是在配置文件中添加安全标记,如下所示:
<bindings>
<webHttpBinding>
<binding name="webHttpBindingWithJsonP" crossDomainScriptAccessEnabled="true" >
<security mode ="Transport">
<transport clientCredentialType= "None" />
</security>
</binding>
</webHttpBinding>
</bindings>
当我遇到这个问题时,我可以在fiddler中看到,使用http调用rest调用会在结果中返回带有回调函数的结果,但是使用https调用相同的rest调用仅返回结果,这些结果未包含在回调函数。
这是我在小提琴手中设置的一个例子,也是你遇到这个问题的症状。
HTTPS REST CALL:
RETURNED: “{\” Statename的\ “:空,\” STATEID \ “:空,\” 区域\ “:NULL}”
HTTP REST CALL: http://mydomain.com/service.svc/GetState?callback=jQuery171013910021002618056_1368658212752&_=1368658215502
RETURNED: jQuery171013910021002618056_1368658212752( “{\” Statename的\ “:空,\” STATEID \ “:空,\” 区域\“:NULL);
您可以看到https调用没有使用jquery回调函数正确包装结果。使用安全标签修复它。希望这有助于下一个人。罗伯特