【发布时间】:2011-10-10 12:42:42
【问题描述】:
我通过 ajax 收到一个 JSON 文件并将其添加到我的 DOM(请参阅: how to read information of an ajax-dialogbox)
现在我想访问这个 DOM 节点,但它工作的唯一方法是:
get_ajax_dialogwindow();
alert("wait for click");
alert("Test Combo" + combobox_by_name(value.ID_of_name));
这工作得很好,但我不希望用户先点击。如果我只尝试
get_ajax_dialogwindow();
alert("Test Combo" + combobox_by_name(value.ID_of_name));
我只得到了数据应该存在的空白空间......我猜这是因为 DOM 还没有准备好。我尝试了 $(document).ready, setTimeout, .delay(), ajax.stop, DOMContentReady 但唯一有效的是一个简单的 alert("wait");但我不能接受那个解决方案,因为我不希望用户点击 20 次:P
有什么想法吗?
谢谢! :)
编辑:
代码如下:
function combobox_by_name(ID_of_name){
return $('select[name=audience\\[' + ID_of_name + '\\]\\[value\\]] option:selected').text();
}
以及我在警报之前使用 HTML 节点插入进行的 ajax 调用:
function get_ajax_dialogwindow(){
var data = '__a=1&__d=1&__user='+get_userID(); //Parameter für den Ajax Aufruf. Bestehend aus __a=1, __d=1 und der UserID
var json;
$.ajax({
type:"GET",
url: get_ajax_url(), //url für empfänger des Ajax Aufrufs. Lässt sich mit Firebug herausfinden, wenn man den link der das Dialogfenster öffnet analysiert
data: data,
dataType: "text", //eigentlich ist es json und kein text, allerdings gibt es einen Schutz von Facebook,
//der die Dauerschleife for(;;;) vorne heranschiebt. Deshalb wird es als Text betrachtet
success: function(response) {
response = response.replace(/.*?;{/, "{"); //Entfernt for(;;;)
jsonFile = JSON.parse(response); //Parsed den Text in ein Json file
$('#globalContainer').append(jsonFile.payload.body.__html); //Fügt das Dialogfenster ganz unten an die Seite hinzu
},
error: function(xhr) { //Fehlermeldung, falls der Ajax aufruf fehlschlägt
alert('Error! Status = ' + xhr.status);
alert(xhr.responseText);
}
});
}
【问题讨论】:
-
请给我们看看有问题的代码。
-
你把这个警报放在哪里了?在成功处理程序内部?你是如何添加到 DOM 中的?
-
DOM 只能准备一次,之后就一直准备好了。
标签: javascript jquery dom