2013-10-29 64 views
0
$(".selectedBatch").each(function(index){ 

     var batchCode = $(this).text(); 

     //edit batch attr start 

     $.ajax({ 

      url: "../Controller/getBatchAttr.php", 
      type: "GET", 
      async: false, 
      data: "BM_Course_Code="+ batchCode, 
      success:function(resBatch){ 
       console.log($(this).text()); 
       //$(this).attr("data-commence-date",resBatch.BM_Commence_Date); 
       //$(this).attr("data-end-date",resBatch.BM_End_Date); 
       //$(this).attr("data-ins-days",resBatch.BM_Ins_Days); 
      } 
     }); 
     //edit batch attr end 
    }); 

爲什麼console.log($(this).text());返回成功函數內的空輸出?這個選擇器與ajax問題

+1

你的意思是使用console.log(batchCode)嗎? –

+0

沒有。成功函數內部 – underscore

+0

不知道這是成功函數內引用的內容。嘗試console.log($(this)),並看到你有你想要的對象。 –

回答

3

this不是局部變量,所以它不保存在閉包中。你需要一個局部變量設置爲它,並用它來代替:我做了

$(".selectedBatch").each(function(index){ 

    var $that = $(this); 
    var batchCode = $that.text(); 

    //edit batch attr start 

    $.ajax({ 

     url: "../Controller/getBatchAttr.php", 
     type: "GET", 
     async: false, 
     data: {BM_Course_Code: batchCode}, 
     success:function(resBatch){ 
      console.log($that.text()); 
      //$that.data("commence-date",resBatch.BM_Commence_Date); 
      //$that.data("end-date",resBatch.BM_End_Date); 
      //$that.data("ins-days",resBatch.BM_Ins_Days); 
     } 
    }); 
    //edit batch attr end 
}); 

其他變化:

  • 傳遞一個對象作爲data:選項。 jQuery將確保它的URL編碼正確(您忘記了調用encodeURIComponent)。

  • 而不是.attr("data-XXX", ...)我使用.data("XXX", ...)

+0

完美答案。謝謝<3 – underscore

0

在成功函數內部,這是指調用$ .ajax時創建的ajax對象。您已經爲文本創建了變量。您可以使用,而不是使用$(本)的.text()

$(".selectedBatch").each(function(index){ 

     var batchCode = $(this).text(); 

     //edit batch attr start 

     $.ajax({ 

      url: "../Controller/getBatchAttr.php", 
      type: "GET", 
      async: false, 
      data: "BM_Course_Code="+ batchCode, 
      success:function(resBatch){ 
       console.log(batchCode); 
       //$(this).attr("data-commence-date",resBatch.BM_Commence_Date); 
       //$(this).attr("data-end-date",resBatch.BM_End_Date); 
       //$(this).attr("data-ins-days",resBatch.BM_Ins_Days); 
      } 
     }); 
     //edit batch attr end 
    }); 
+0

我認爲'console.log()'只是爲了調試,而在他的真實應用中,他關心的是被註釋掉的'.attr()'行。 – Barmar

+0

@Barmar是的,我想填寫那些推薦的東西。我用console.log測試了它。現在我知道這個選擇器多了。謝謝 – underscore

+0

是的..沒有注意到...你的答案談到以及... – Vishwanath

0

你可以在這裏使用context對象,如:

$.ajax({ 
    url: "../Controller/getBatchAttr.php", 
    type: "GET", 
    async: false, 
    data: "BM_Course_Code=" + batchCode, 
    context: this, // <--- using context as `this` here 
    success: function (resBatch) { 
     console.log($(this).text()); // Now you can use `this` here 
    } 
}); 

context對象將作出一切Ajax-的情況下相關的回調。