JSONP 回调顺序不对
JSONP callback out of order
如果这是一个重复的问题,我深表歉意。我已经完成了研究,但仍然无法给出答案:
我正在编写一个小的JSONP API。期望的结果:
-
程序员创建 JSON 类的实例。
var json = new jsonpRequest ( "http://url.to.web_service", searchParam //passed in as an associative array );
-
然后程序员声明
var myJSON = jsonpRequest.getJsonP()
这会将 JSONP 返回到要处理的 myJSON 变量中。
当构造类的实例时,API 成功接收参数,生成指向具有所需参数的服务的链接,并使用以下函数通过脚本标记将其注入 DOM:
jsonpRequest.prototype.fetchJsonp = function(){
var request = that.getRequest();
//creates a script element
var jsonpCall = document.createElement('script');
//gets jsonp request
jsonpCall.src = request;
//adds script to DOM, which goes on to request the JSONP from the service.
document.head.appendChild(jsonpCall);
};
编辑:为了清楚起见:这肯定会返回请求的数据集。
我用作回调的函数是:
jsonpRequest.prototype.processCallback = function(data){
alert(data);
that.setListOfResults(data);
};
它在链接中称为:&callback=jsonpRequest.prototype.processCallback
processCallback
函数从请求中获取数据,并使用 setListOfResults
函数将其存储在类中的变量中。
存储数据后,我想将请求中的数据返回到 myJSON
变量。这是程序员在该过程的步骤 2 中调用的getJsonp
函数:
jsonpRequest.prototype.getJsonp = function(){
that.buildRequest();
that.fetchJsonp();
return that.listOfResults;
};
问题:
以下是我在定义 JSON API 类后调用的内容:
var myJSON = json.getJsonp();
console.log(myJSON);
因为它是异步的,所以在调用回调函数之前,它会移动到控制台日志,从而导致MYJSON
被undefined
。我不确定如何将我的代码菊花链在一起,以便在继续之前运行回调。
我试图模拟如何让这个 JSONP 调用返回值的解决方案?。我可能错过了一步,或者我可能对某些事情一无所知!任何帮助澄清这一点将不胜感激。提前谢谢你:)。
附言我想避免使用JQuery等...将其严格保留为原始 JavaScript 是有益的。
我不确定如何将我的代码菊花链在一起,以便在继续之前运行回调。
你不能这么做。您必须依赖回调。将 callback
参数添加到 jsonpRequest
构造函数,并在执行 setListOfResults(data)
后调用该回调。您可能还希望允许设置执行回调的this
上下文。
jsonpRequest.prototype.processCallback = function(data){
alert(data);
that.setListOfResults(data);
that.callback.apply(that.context, [data]);
};
- 预保存钩子:mongoose中回调的顺序如何
- 不同'单击'不同脚本中的回调:我可以控制执行顺序吗
- Javascript执行顺序和回调
- 复合视图回调顺序
- 如何按顺序运行一系列回调函数
- 承诺回调的触发顺序是什么
- nodeJS中的承诺/承诺中的回调/执行顺序是不对的
- 使用递归函数按顺序执行多个 ajax 请求,并在所有请求完成后执行回调函数
- JS加载顺序 - 滚动JS禁用,回调解决方案,或者更简单
- JSONP 回调顺序不对
- AngularJS$q承诺成功的回调以错误的顺序执行
- 具有不同延迟的setTimeout()回调的JavaScript执行顺序
- 维护事件回调中元素的顺序
- 如何将回调顺序调用设置为与目标函数调用相同
- 如何将函数执行顺序设置为在JavaScript中使用回调函数
- HTML5数据库-事务VS executeSql回调顺序
- Jquery,绑定顺序/等待回调
- jQuery回调以不寻常的顺序发生(主要在Chromium/chrome中)
- -父组件回调如何通过子道具接收参数顺序/值
- Javascript回调——为什么它们的处理顺序不同?