当通过ssl调用时,jQuery jsonp ajax调用不返回结果

时间:2011-05-05 00:28:31

标签: jquery ajax ssl jsonp

我有以下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调用时不返回结果(也不是错误)。

有什么想法吗?

1 个答案:

答案 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:

https://mydomain.com/service.svc/GetState?callback=jQuery171014469725495108632_1368658094950&_=1368658098533

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回调函数正确包装结果。使用安全标签修复它。希望这有助于下一个人。罗伯特