2016-09-14 4 views
-1

現在Google Mapsで作業しています。データベースの一部の場所を保存し、ajax呼び出しで取得したい場合は、その場所からJavaScriptオブジェクトを作成します。ajaxの成功呼び出しからjavascript関数を実行しています

コードについては、なぜこれが動作しないのかわからないのですが、誰かがこれをクリアすることはできますか?

クロームコンソール: キャッチされない例外TypeError:コメントケビン・Bについてthis.processDataは関数ではありません

var Locations = { 
 
    count: 0, 
 
    location: [], 
 
    processData: function (data) { 
 
     console.log(data); 
 
    }, 
 
    getData: function() { 
 
     'use strict'; 
 
     
 
     jQuery.ajax({ 
 
      type: 'get', 
 
      url: '../../php/functions/getLocations.function.php', 
 
      dataType: 'json', 
 
      success: function (data) { 
 
       this.processData(data); 
 
      } 
 
     }); 
 
    } 
 
};
非同期呼び出しが完了した権利であるときに行わ一部を実行する必要があり、掲載? 最終編集:

function getLocation() { 
    return $.ajax({ 
     type: 'get', 
     url: '../../php/functions/getLocations.function.php', 
     dataType: 'json' 
    }); 
} 

getLocation().done(function(result) { 
    console.log(result); 
    return result; 
}); 
+0

をターゲットにしているように、変数に格納した後thisを使用するか、私は – Smoothal

+0

...新しい問題で、この記事を編集し、それはまだだまされやすい人だが、別の質問の:非同期関数から戻ることはできません。それは不可能。 –

+0

あなたの編集が既存の回答を無効にしたため、私は質問をロールバックしました。新しい質問がある場合は、新しい質問としてそれを質問する必要があります。しかし、あなたが尋ねようとしていたのは非常に一般的な欺瞞です。最初に検索する必要があります。 http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call –

答えて

1

キーワードthisそれが中に初期化された範囲を指し だからあなたの場合には、それはsuccess -functionの範囲です。オブジェクト自体を参照するものではありません。

この機能を利用するには、オブジェクトへの参照をキャッシュしてsuccess関数内で使用するか、オブジェクト自体を参照する必要があります。

オブジェクト参照:

jQuery.ajax({ 
    type: 'get', 
    url: '/echo/json/', 
    dataType: 'json', 
    success: function(data) { 
    Locations.processData(data); 
    } 
}); 

キャッシュthis

getData: function() { 
    'use strict'; 
    let _this = this; 
    jQuery.ajax({ 
     type: 'get', 
     url: '/echo/json/', 
     dataType: 'json', 
     success: function(data) { 
     _this.processData(data); 
     } 
    }); 
    } 

Fiddle

this
+0

答えはほぼあります....例を挙げてください。 – Adam

+0

アダムは正しいですが、私は考えを得ます。私はそれを適応させようとします – Smoothal

+0

@Smoothは2つの具体例を加えました。私は個人的に2番目のものと一緒に行くだろう。 – empiric

0

は、Ajax設定を指していますオブジェクト。 $ .proxyを使用するか、右context

getData: function() { 
     'use strict'; 
     var thisLocation = this; 
     jQuery.ajax({ 
      type: 'get', 
      url: '../../php/functions/getLocations.function.php', 
      dataType: 'json', 
      success: function (data) { 
       thisLocation.processData(data); 
+0

@KevinB - 回答者はコードサンプルを提供していませんでしたが、私のコメントをしたときに 'this'が間違っていたという事実をほのめかしました – Adam

+0

なぜ役に立たないのですか?あたりです。 –

+0

この回答はすでに詐称対象に存在しています。重複した回答 - >役に立たない。 –

関連する問題