2017-09-25 1 views
0

2番目のajaxリクエストで最初のデータを使用できるように、別の(.thenで)AJAXリクエストをネストしようとします。この場合、最初のajax呼び出しの座標を2番目のajax要求(マップ座標)に使用します。 変数はlattとlongです。別のリクエストのデータに依存するAjaxリクエスト

$(document).ready(function(){ 

    $('#submitWeather').click(function(){   
     var city= $("#city").val(); 
     var latt, long;    
     if(city !=''){     
      $.ajax({     
       url:'http://api.openweathermap.org/data/2.5/weather?q=' + city + "&units=metric" + "&APPID="....", 
       type: "GET", 
       dataType: "jsonp", 
       success: function(data){ 
        console.log(data);      
        var widget = show(data); 
        $("#show").html(widget);     
        latt = coord.lat; 
        long = coord.lon;      
       } 

      }).then($.ajax({ 

       url:'https://maps.googleapis.com/maps/api/js?key="..."&callback=initMap', 
       type: "GET", 
       dataType: "jsonp", 
       success: function initMap() { 
       var uluru = {lat: +latt+, lng: +long+}; 
       var map = new google.maps.Map(document.getElementById('map'), { 
       zoom: 4, 
       center: uluru 
      }); 
     var marker = new google.maps.Marker({ 
      position: uluru, 
      map: map 
     }); 
     }   
    }); 
    }else{     
     $("#error").html("<div class='alert alert-danger text-center'> The field cannot be empty, please enter a city! </div>"); 
    } 
}); 
}); 
+0

最初の関数の中に2番目の関数を入れるだけです。 – sideroxylon

+0

[JavaScriptの約束:はじめに](https://developers.google.com/web/fundamentals/getting-started/primers/promises) – Andreas

答えて

0

2番目のajax呼び出しを関数にラップし、最初の呼び出しが成功した後に呼び出します。

 

    function secondajaxcall(latt, long){ 
    /** your second ajax call **/ 

    } 
    function firstajaxcall(){ 
    $.ajax({ 

      XXXXXXXX, 

       success: function(data){ 
        latt = data.lat; 
        long = data.long; 
        secondajaxcall(latt, long); /* CALL SECOND FUNCTION **/ 
       } 

      }) 


    } 
    firstajaxcall(); 

+0

それは動作しません –

+0

はい、これはコピー&ペーストのコードではありません。それは箱からはうまくいかないでしょう。変数を2番目のajax関数に渡すだけです。 –

関連する問題