2017-12-11 14 views
0

jQueryのgetJSON関数をオーバーライドする必要があり、オーバーライド関数内で約束関数(完了/失敗)を取得する方法があるかどうか疑問です。私は関数がどこかに保存されていると思います。私はこだわっていますgetJSONをオーバーライドしてjQueryの約束を取得する(完了/失敗)

(function ($) { 
    $.getJSON = function (url, data, callback) { 
     this.done = function(){}; 
     this.fail = function(){}; 
     var newDoneFtn = function(response) { 
      var newData = JSON.parse(response.data); 
      //call done function here with newData variable 
     } 
     var newFailFtn = function() { 
      //call fail function here 
     } 
     newFunction(url, data, newDoneFtn, newFailFtn); 
    }; 
})(jQuery); 

$.getJSON(someURL, { 
    id: 1 
}).done(function(data) { 
    console.log(data); 
}).fail(function() { 
    console.log('failed'); 
}); 

が行われ、newFunctionで使用するgetJSON呼び出しで関数を失敗した取得しようとしている。ここではコードの先頭です。 newFunctionを変更することはできません。

+0

いいえいいえ、jQueryを延期する必要があります。 – Bergi

+0

なぜあなたは 'getJSON'をオーバーライドする必要があると思いますか?あなたの[実際の問題](https://meta.stackexchange.com/q/66377)は何ですか? – Bergi

+0

私はCordovaのAndroidに関する問題を扱っており、以前のバージョンのAndroid(5以前)ではcordova.plugin.http.get関数を使用するためにすべてのgetJSON関数を書き直す必要はありません。私は物事を過度に複雑にしたくないので言及しなかった。 – fanfavorite

答えて

1

$.Deferred()を使用して新しい遅延オブジェクトを作成する必要があります。

その約束を解決するか失敗するかは、resolve()reject()関数を呼び出して渡すことができます。

+0

例を挙げることはできますか?私はnewFunctionで約束を使用することはできず、上に示したように関数変数を渡す必要があります。 – fanfavorite

+0

@fanfavorite:それは 'Deferred'の' resolve'と 'reject'メソッドが対象です。ドキュメントを参照してください。 – SLaks

+0

複数のgetJSON呼び出しが同時に発生した場合はどうなりますか?遅延オブジェクトは、実際に行われたものだけでなく、それらのすべてを解決するでしょうか? – fanfavorite

1

SLaksは既に回答済みです。 $.Deferredを返すことができます:

function getJson(){ 
    var deferred = $.Deferred(); 
    try{ 
    someCallbackApi(
     param 
     ,function(response){ 
     response.error 
      ? deferred.reject(response.error) 
      : deferred.resolve(JSON.parse(response.data)) 
     } 
    ); 
    }catch(e){ 
    deferred.reject(e); 
    } 
    return deferred.promise(); 
} 
+0

私は$ .getJSON(...)。doneは関数ではなく、someCallbackApi完全関数がトリガされても、実際にはdone関数を呼び出さないというエラーが発生します。基本的に上記のコードの中にコードを設定しています。このフィドルを参照してくださいhttp://jsfiddle.net/bbrudm47/1/ – fanfavorite

+1

私はそれが返されるべきであることがわかりましたdeferred.promise()。私はあなたの答えを編集しました。ありがとう。 – fanfavorite

関連する問題