JSONP 回调顺序不对

JSONP callback out of order

本文关键字:顺序 回调 JSONP      更新时间:2023-09-26

如果这是一个重复的问题,我深表歉意。我已经完成了研究,但仍然无法给出答案:

我正在编写一个小的JSONP API。期望的结果:

  1. 程序员创建 JSON 类的实例。

    var json = new jsonpRequest (
    "http://url.to.web_service",
    searchParam //passed in as an associative array
    );
    
  2. 然后程序员声明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);

因为它是异步的,所以在调用回调函数之前,它会移动到控制台日志,从而导致MYJSONundefined。我不确定如何将我的代码菊花链在一起,以便在继续之前运行回调。

我试图模拟如何让这个 JSONP 调用返回值的解决方案?。我可能错过了一步,或者我可能对某些事情一无所知!任何帮助澄清这一点将不胜感激。提前谢谢你:)。

附言我想避免使用JQuery等...将其严格保留为原始 JavaScript 是有益的。

我不确定如何将我的代码菊花链在一起,以便在继续之前运行回调。

你不能这么做。您必须依赖回调。将 callback 参数添加到 jsonpRequest 构造函数,并在执行 setListOfResults(data) 后调用该回调。您可能还希望允许设置执行回调的this上下文。

jsonpRequest.prototype.processCallback = function(data){
    alert(data);
    that.setListOfResults(data);
    that.callback.apply(that.context, [data]);
};