2017-03-02 23 views
0

這是我的代碼:AJAX查詢沒有正確的參考變量

$('.store-card').each(function() { 
 
    placeid = $(this).data('placeid'); 
 
    latlng = $(this).data('latlng'); 
 

 
    card = this; 
 
    console.log("1 ", card); 
 

 
    $.ajax({ 
 
    url: '/stores/placeid/', 
 
    method: "GET", 
 
    data: { 
 
     placeid: placeid 
 
    }, 
 
    dataType: 'json', 
 
    success: function(response) { 
 
     console.log(card); 
 
    } 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

這裏的問題是,由當時的AJAX查詢返回的響應,refernce到card有已經改變,因此card將始終具有最後一個項目的值。

此控制檯輸出:

1 <div class="store-card" data-map="#slink-10" data-timing="#stmg-10" data-openhours="#sopen-10" data-placeid="ChIJTZD7ufceDTkRXZdMW4ObIM4" data-latlng=""> 
    1 <div class="store-card" data-map="#slink-9" data-timing="#stmg-9" data-openhours="#sopen-9" data-placeid="ChIJK-bJgRwDDTkR5vzdTwSc7JI" data-latlng=""> 
    1 <div class="store-card" data-map="#slink-22" data-timing="#stmg-22" data-openhours="#sopen-22" data-placeid="ChIJk2W43rPjDDkRMeRmDOo8QT8" data-latlng=""> 
    1 <div class="store-card" data-map="#slink-11" data-timing="#stmg-11" data-openhours="#sopen-11" data-placeid="ChIJebql01D7DDkRMELWwmmpS_A" data-latlng=""> 
    <div class="store-card" data-map="#slink-11" data-timing="#stmg-11" data-openhours="#sopen-11" data-placeid="ChIJebql01D7DDkRMELWwmmpS_A" data-latlng=""> 
    <div class="store-card" data-map="#slink-11" data-timing="#stmg-11" data-openhours="#sopen-11" data-placeid="ChIJebql01D7DDkRMELWwmmpS_A" data-latlng=""> 
    <div class="store-card" data-map="#slink-11" data-timing="#stmg-11" data-openhours="#sopen-11" data-placeid="ChIJebql01D7DDkRMELWwmmpS_A" data-latlng=""> 
    <div class="store-card" data-map="#slink-11" data-timing="#stmg-11" data-openhours="#sopen-11" data-placeid="ChIJebql01D7DDkRMELWwmmpS_A" data-latlng=""> 

我怎麼能保證每個$.ajax都會有相應的參考card,而不是最新的參考?

+1

不要忘記加上'var'當你聲明變量! –

+1

使用'type:「GET」'代替'method:「GET」'。 – Shubham

回答

1

你千萬不要忘記添加var所有的第一次聲明的變量!

因此,嘗試改變代碼如下:

var placeid = $(this).data('placeid'); 
var latlng = $(this).data('latlng'); 

var card = this; 
3

使用

var card = this; 

在你的代碼剪斷,然後是它獲取在封閉綁定的本地變量。 在你的代碼中,它是一個可以被其他代碼改變的全局變量(= window.card)。

1

您可以設置$.ajax()contextthis

$.ajax({ 
    context: this 
}) 
.then(function() { 
    // `this` : `this` within `.each()` 
}) 
+0

@Ajoy jsfiddle https://jsfiddle.net/dduj2nrn/ – guest271314