簡體   English   中英

在AJAX調用之后訪問DOM對象?

[英]Accessing DOM object after AJAX call?

我有一個典型的AJAX調用,該調用將一些HTML追加到當前頁面。 我希望能夠使用典型的jQuery選擇器訪問新插入的HTML。

這里是我能夠做到......

$.ajax({
   url: url,
   success: function(data) {
      $('body').append(data);
   }
});

$('#new_div').show();

#new_div將是我檢索到的數據中的一些HTML元素。 我不一定要附加事件到新的元素(如click ),因此使用類似.load().on()不在這里工作了(據我所知)。

我嘗試將$.ajax()調用設置為變量: var new_div = $.ajax(...)但這並沒有幫助我。

如果您想在將新內容插入DOM之后(或什至之前)立即處理新內容,也可以將其放入AJAX成功回調中:

$.ajax({
   url: url,
   success: function(data) {
      $('body').append(data);
      $('#new_div').show();
   }
});

另一方面,如果您要將處理程序綁定到將通過ajax添加到頁面的內容,jQuery會這樣做:

$(document).on('click', '#new_div', function(){
  alert("This function is bound to all #new_div's click events, even if they are added to the DOM via ajax later!")
});

怎么樣:

$.ajax({
   url: url,
   success: function(data) {
      $('body').append(data).find('#new_div').show();
   }
});

如果要將代碼與回調分離:

functionWithALotOfStuffToDo = function(data){
  // do stuff here
}

$.ajax({
   url: url,
   success: functionWithALotOfStuffToDo
});

假設返回的數據類似<div id='new_div' />然后嘗試類似

var newDiv = null;

$.ajax({
    url: url,
    success: function(data) {
        newDiv = $(data).appendTo($('body'));
    }
});

這會將<div />添加到頁面的正文中,並將jQuery元素分配給變量newDiv ,然后可以在以后的階段再次訪問它。

但是,如果在返回success之前訪問newDiv ,則它將為null或以前的值(如果先前已分配)。

實際上,可以通過以下方法解決此類問題:(我知道它與其他方法相似,但更清楚一點)

$.ajax({
   url: url,
   success: function(data) {
      $('body').append(data);
      afterHtmlAppendCallback();
   }
});
function afterHtmlAppendCallback()
{
    $('#new_div').show();
}

我認為這是ajax異步導致您提到的問題。

在jQuery中,ajax funciton API表示:執行異步HTTP(Ajax)請求。

如果要在請求后立即從ajax訪問數據

您應該將代碼放在ajax.success函數中,例如:

$.ajax({
   url: url,
   success: function(data) {
      $('body').append(data);
      $('#new_div').show();
   }
});

或者將異步設置設為false

$.ajax({
   url: url,
   async:false,
   success: function(data) {
      $('body').append(data);
   }
});
$('#new_div').show();

這將確保$('#new_div')選擇器獲取對象

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM