San*_*tam 28 javascript jquery jsonp
正在做一些使用jQuery调用我在不同域上的服务.成功调用服务(我的调试点被触发),并返回正确的响应(我嗅探流量).
我的问题主要是成功和失败的回调不会被解雇.我已经在SO上阅读了一些其他帖子,表明在使用JSONP时没有触发错误事件.这是成功事件的情况(也许是因为我假设我提供自己的回调函数),或者有没有办法解雇我的成功回调.提前致谢.
$.ajax({
type: "GET",
url: urlOnDiffDomain,
async: false,
cache: false,
dataType: 'jsonp',
data: {},
success: function(data, textStatus) {
alert('success...');
},
error: function(xhr, ajaxOptions, thrownError) {
alert('failed....');
}
});
Run Code Online (Sandbox Code Playgroud)
San*_*tam 19
好的.如果将来有人需要知道......事后看来,解决方案可能应该比以前更加明显,但您需要将Web响应直接写入响应流.简单地返回一串JSON不会这样做,你需要有人构造它并将其流回.如果您确实这样做,我原始帖子中的代码将正常工作.
服务代码示例:
public void DoWork()
{
//it will work without this, but just to be safe
HttpContext.Current.Response.ContentType = "application/json";
string qs = HttpContext.Current.Request.QueryString["callback"];
HttpContext.Current.Response.Write(qs + "( [{ \"x\": 10, \"y\": 15}] )");
}
Run Code Online (Sandbox Code Playgroud)
只是为了明确,这是客户端代码.
function localDemo(){
$.getJSON("http://someOtherDomain.com/Service1.svc/DoWork?callback=?",
function(data){
$.each(data, function(i,item){
alert(item.x);
});
});
}
Run Code Online (Sandbox Code Playgroud)
如果有更好的方法,我会全力以赴.对于其他所有人,我知道在WCF 4.0中对JSONP有一些原生支持的概念.此外,您可能需要为安全目的进行一些检查 - 尽管我没有进行太多调查.
Guf*_*ffa 14
在success当服务器响应回调方法被调用.该$.ajax方法设置一个函数,通过调用success回调方法来处理响应.
success不调用该方法的最可能原因是来自服务器的响应不正确.该$.ajax方法在callback查询字符串中发送一个值,服务器应将该值用作JSONP响应中的函数名.如果服务器使用其他名称,$.ajax则永远不会调用该方法设置的功能.
如果服务器无法使用callback查询字符串中的值来设置响应中的函数名称,则可以指定$.ajax方法应从服务器获取的函数名称.将该属性添加jsonpCallback到选项对象,并将值设置为服务器在响应中使用的函数的名称.
例如,如果$.ajax方法是使用URL http://service.mydomain.com/getdata?callback=jsonp12345向服务器发送请求,则服务器应该响应以下内容:
jsonp12345({...});
Run Code Online (Sandbox Code Playgroud)
如果服务器忽略callback查询字符串,而是响应类似于:
mycallback({...});
Run Code Online (Sandbox Code Playgroud)
然后,您必须通过向options对象添加属性来覆盖函数名称:
$.ajax({
url: urlOnDiffDomain,
dataType: 'jsonp',
data: {},
success: function(data, textStatus) {
alert('success...');
},
jsonpCallback: 'mycallback'
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
40967 次 |
| 最近记录: |