1

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

我正在编写一个小的 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变量。这是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 将是有益的。

4

1 回答 1

2

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

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

jsonpRequest.prototype.processCallback = function(data){

    alert(data);
    that.setListOfResults(data);
    that.callback.apply(that.context, [data]);

};
于 2013-09-23T14:15:00.783 回答