如果这是一个重复的问题,我很抱歉。我已经完成了我的研究,但我仍然无法想出一个答案:JSONP回调不按顺序
我在写一个小的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
变量。这是getJsonp
功能,程序员在此过程中的步骤2调用:
jsonpRequest.prototype.getJsonp = function(){
that.buildRequest();
that.fetchJsonp();
return that.listOfResults;
};
问题:
这里是我打电话后,我确定我的JSON API类:
var myJSON = json.getJsonp();
console.log(myJSON);
由于它是异步的,它在调用回调函数之前移动到控制台日志,导致MYJSON
为undefined
。我不知道如何将我的代码以这种方式连接起来,然后再继续前进。
我试图效仿How can I get this JSONP call to return a value?的解决方案。我可能会错过一个步骤,或者我可能对某些事情一无所知!任何帮助澄清这将不胜感激。先谢谢你 :)。
P.S.我想避免使用JQuery等......将它严格保存为原始JavaScript是有益的。
为了查看'myJSON'的值,您必须等到服务器响应返回。尝试使用'setTimeout'进行测试。您无法使用异步数据设置变量并立即预期结果。 – hitautodestruct
嘿有hitautodestruct,谢谢你的建议:)。我意识到'setTimeout'是一个可能的解决方案。这是一个非常有效的解决方案。但是,我不愿意在http://stackoverflow.com/questions/17465011/how-can-i-get-this-jsonp-call-to-return-a-value中的Relfor点之后这样做。不过,如果服务器没有响应,我也许可以实现'setTimeout'作为失败保护。谢谢! – Mark
嘿,只是一个FYI的setTimeout不是一个好的解决方案,因为你永远不知道到底需要多少时间来服务器响应。我只是为了测试目的而提出它。 – hitautodestruct