Я получаю JSON-файл через ajax и добавляю его в свой DOM (см .: как читать информацию из 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, но единственное, что сработало, было простое предупреждение («wait»);но я не могу жить с этим решением, потому что я не хочу, чтобы пользователь нажимал 20 раз: P
есть идеи?
Спасибо!:)
Редактировать:
вот код:
function combobox_by_name(ID_of_name){
return $('select[name=audience\\[' + ID_of_name + '\\]\\[value\\]] option:selected').text();
}
и вызов ajax, который я делаю прямо перед предупреждением со вставкой HTML-узла:
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);
}
});
}