使用jquery jsonp返回错误回调函数没有被调用
Posted
技术标签:
【中文标题】使用jquery jsonp返回错误回调函数没有被调用【英文标题】:Using jquery jsonp returns error callback function was not called 【发布时间】:2013-10-21 12:41:11 【问题描述】:我有以下working example,我正在尝试通过 jquery 请求获取http://detectlanguage.com。由于这将是一个跨域请求,我使用的是 jsonp。
这里是 a link in MSDN,有一个类似的请求,据推测 jsonp
是要走的路。
一切都很好,除了页面抛出错误Error: myCallback was not called
,我从服务器得到的响应如下:
"data":
"detections":[
"language":"ca",
"isReliable":false,
"confidence":0.14992503748125938
,
"language":"en",
"isReliable":false,
"confidence":0.00 8103727714748784
]
我整天在 *** 中搜索有关 jsonp 的答案,但还没有得到它的工作。
非常感谢任何帮助
更新
包括AJAX调用
$.ajax(
url: 'http://ws.detectlanguage.com/0.2/detect',
data:
q: $('#hi').val(),
key:'demo'
,
jsonpCallback: 'myCallback',
dataType: "jsonp",
success: myCallback,
error: function(e,i,j)
$('#results').html(j)
);
我还有一个叫做myCallback
的javascript函数:
function myCallback(response)
alert(response.data)
【问题讨论】:
看起来不像是从您调用的服务返回的 jsonp。 显示 ajax 请求,该响应也不是 JSONP 你好,早上好。谢谢你的回复。我已经更新了问题以包括小提琴中的 ajax。此外,我在网络中包含一个链接,其中暗示 jsonp 是要走的路。请看一下问题中包含的小提琴。 【参考方案1】:响应好像不是jsonp,jsonp响应应该是javascript。下面是适合我的代码。
ajax 请求:
$.ajax(
crossDomain: true,
type:"GET",
contentType: "application/json; charset=utf-8",
async:false,
url: "http://<your service url here>/HelloWorld?callback=?",
data: projectID:1,
dataType: "jsonp",
jsonpCallback: 'fnsuccesscallback'
);
服务器端代码返回 jsonp (c#):
public void HelloWorld(int projectID,string callback)
String s = "Hello World !!";
StringBuilder sb = new StringBuilder();
JavaScriptSerializer js = new JavaScriptSerializer();
sb.Append(callback + "(");
sb.Append(js.Serialize(s));
sb.Append(");");
Context.Response.Clear();
Context.Response.ContentType = "application/json";
Context.Response.Write(sb.ToString());
Context.Response.End();
【讨论】:
这么多搜索。这么多天把我的头撞在墙上。出于某种原因,它做到了。谢谢!【参考方案2】:我还花了很长时间四处寻找答案。我的解决方案与服务有关,而不是 ajax 调用或 jQuery。具体来说,需要在 web.config 中使用此设置将服务设置为允许跨域访问:
<system.serviceModel>
<bindings>
<webHttpBinding>
<binding name="webHttpBindingWithJsonP" crossDomainScriptAccessEnabled="true" />
</webHttpBinding>
</bindings>
...
<endpoint address="../YourService.svc"
binding="webHttpBinding"
bindingConfiguration="webHttpBindingWithJsonP"
contract="YourServices.IYourService"
behaviorConfiguration="webBehavior" />
【讨论】:
以上是关于使用jquery jsonp返回错误回调函数没有被调用的主要内容,如果未能解决你的问题,请参考以下文章