如果这是一个重复的问题,我深表歉意。我已经完成了我的研究,但我仍然无法给出答案:
我正在编写一个小的 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
. 我不确定如何以菊花链方式将我的代码链接在一起,以便在继续之前运行回调。
我试图从如何让这个 JSONP 调用返回一个值?. 我可能错过了一步,或者我可能对某些事情一无所知!任何澄清这一点的帮助将不胜感激。先感谢您 :)。
PS 我想避免使用 JQuery 等......将其严格保留为原始 JavaScript 将是有益的。