2016-08-11 28 views
0

私はajax呼び出しで、latとlongを持つデータを返します。ajax内で別のajax呼び出しの成功関数を呼び出す - jQuery

$.ajax(
{ 
    url: 'json/data.json', 
    dataType : 'json', 
    type: 'get', 
    cache: false, 
    success: function(fullJSONData) 
    { 
    $(fullJSONData.events).each(function(index, oneJSONLine) 
    { 
     $('#eventList').append(newEvent(index, oneJSONLine))    
    }); 
    }, 
    error: function (e) 
    { 
    console.log("error " + e.message); 
    } 

}); 

私は.eachを使用してループしていますし、ここでNEWEVENT機能を持つIは、緯度と長いジオコードを逆に別のAJAX要求を呼び出しています。

function newEvent(iter, event) 
{ 
    var placeName 

    getGeoCode(event.lat, event.long, function(returnAddress) 
    { 
    placeName = returnAddress 
    //other processing 
    } 
} 


function getGeoCode(lat, long, callback) 
{ 
    var newurl = "https://maps.googleapis.com/maps/api/geocode/json?latlng=" 
    newurl += lat 
    newurl += ',' 
    newurl += long 
    newurl += '&key=AIzaSyCgISQV9F_6VW_wqyJk9rM5rTWvoD_eqVs' 

$.ajax(
{ 
    //GeoCode Api  
    url: newurl, 
    dataType : 'json', 
    type: 'get', 
    cache: false, 
    success: function(fullJSONData) 
    { 
     callback(fullJSONData.results[0].formatted_address)  
    }, 
    error: function (e) 
    { 
     console.log("error " + e.message); 
    } 

}); 

私は何が起こっているのか理解していると思いますが、解決方法は少し分かりません。私はそれがajaxであるので、私が想像するようにそれの中のajaxが完了するのを待っていないと信じています。続行する前に各内部のajax呼び出しが完了するまで.eachを待たせることができますか?私はasync:falseを試しましたが、私はそれがメインスレッドでは良くないと言っています。

誰でも正しい方向に向けることができますか?私はちょうどコールバック関数を2番目のajax呼び出しのために働かせて、最初のajax呼び出しの周りに入れようとしましたが、それは私を少し超えています。

おかげ

+0

呼び出します。 http://blog.slaks.net/2015-06-10/advanced-promise-usage/ – SLaks

答えて

0

最近クロム52(2016年8月)で導入されたバグはまた、行動のこの種を引き起こす可能性があります。成功ハンドラから開始されたajax GET要求の適切な処理が妨げられます。 うまくいけば、それは長く続くことはありません。

https://bugs.chromium.org/p/chromium/issues/detail?id=633696

は、キャッシュを追加してください:あなたのアヤックスへの偽はあなたが約束を使用する必要があります

+0

を参照してください。HiLodovic私はChromeを使用していませんが、情報に感謝します。 – Scone

関連する問題