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);

非同期であるため、コールバック関数が呼び出される前にコンソール ログに移動しているためMYJSONundefined. 先に進む前にコールバックを実行するような方法でコードをデイジー チェーンする方法がわかりません。

How can I get this JSONP call to return a value?のソリューションをエミュレートしようとしました。. 一歩抜けているか、何かを知らないのかもしれません! これを明確にするための助けをいただければ幸いです。前もって感謝します :)。

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 に答える