#php #javascript #xml #ajax
#php #javascript #xml #ajax
Вопрос:
Я работаю над текущим исправлением, и я застрял.
Краткое объяснение архитектуры приложения: скрипт отправляет XML-запрос на dispatcher.php . В верхней части диспетчера установлен тип содержимого text / xml. Затем команда устанавливается в соответствии с атрибутом в запросе:
<request type="buworkflows"><unit>10</unit></request>
Таким образом, для команды buworkflows вызывается база данных и возвращается набор данных, содержащий данные.
Предполагается, что выпадающий список будет динамически генерироваться с использованием этих возвращенных данных. Тем не менее, я получаю «требуемый объект» в IE. Следующий код отлично работал в IE и FF на моем сервере разработки, но не работает в режиме реального времени. Я не могу отлаживать с помощью FF в режиме реального времени; приложение адаптировано для IE, и любые моды означают, что я влияю на текущую систему. Итак, теперь я должен работать с IE. Я выдал идентификатор устройства и запрос XML; все в порядке. Этот конкретный запрос не выполняется только для одного типа набора данных; для остальных все работает нормально.
Я надеюсь, что этого достаточно для комментариев и отзывов.
Действительно нужна ваша помощь, ребята.
*** Последнее обновление: вчера я решил эту проблему, ребята. Пожалуйста, смотрите объяснение в моем комментарии к Джеймсу. Спасибо за ваше время и помощь. Решено.
Обновление: WS_DISPATCHER разрешает /ws/dispatcher.php . Я подтвердил с помощью отладки, что он передается в AJAX правильно.
Обновление: для завершения getRequestObject()
function getRequestObject() {
resetMsgBar();
var req = null;
if(XMLHttpRequest) {
req = new XMLHttpRequest();
if(req.overrideMimeType)
req.overrideMimeType("text/xml");
}
else if(window.ActiveXObject) {
try {
req = new ActiveXObject("msxml2.xmlhttp");
} catch(e) {
try {
req = new ActiveXObject("microsoft.xmlhttp");
} catch(e) {}
}
}
if(!req)
return null;
else
return req;
}
Код AJAX:
var req = getRequestObject();
var reqXml = new String();
reqXml = "<request type='buworkflows'>";
reqXml = "<unit>" id "</unit>";
reqXml = "</request>";
req.open("POST", "<?=WS_DISPATCHER_ADDR?>", true);
req.onreadystatechange = function() {
if(req.readyState==4) {
if(req.status==200) {
//var wfData = new ActiveXObject("microsoft.xmldom");
//wfData.async = false;
//wfData.load(req.responseXml);
var opt = null;
document.getElementById("type").options.length=0;
opt = document.createElement("option");
opt.text ="Please select the assignment type";
opt.value="-1";
document.getElementById("type").options.add(opt);
//if(wfData.documentElement) {
for(var i=0; i < req.responseXML.documentElement.childNodes.length; i ) {
opt = document.createElement("option");
var elem = req.responseXML.documentElement.childNodes[i];
opt.value = elem.childNodes[0].childNodes[0].nodeValue;
opt.text = elem.childNodes[2].childNodes[0].nodeValue;
if (undefined != elem.childNodes[3].childNodes[0]){
opt.title = elem.childNodes[3].childNodes[0].nodeValue;
}
document.getElementById("type").options.add(opt);
//}
//opt.text = req.responseXML.documentElement.childNodes[i].firstChild.selectSingleNode("name").text;
//opt.value=req.responseXML.documentElement.childNodes[i].selectSingleNode("id").text;
//opt.title=req.responseXML.documentElement.childNodes[i].selectSingleNode("description").text;
//document.getElementById("type").options.add(opt);
}
//}
loadAdditionalFields(0);
hideProgressBar();
}
}
}
req.send(reqXml);
Комментарии:
1. Добавьте фактический код для getRequestObject() .
2. Я предлагаю вам установить Fiddler2 и проверить фактический ответ, который вы получаете от вызова ajax в живой среде, как заголовки, так и содержимое. Это может дать вам подсказку.
3. Что
responseText
содержит?4. @RoToRA: содержит фактический XML. смотрите Комментарий к ответу Джеймса и мои заметки в исходном сообщении.
Ответ №1:
Отладка путем добавления:
if(req.status==200) {
alert(req.responseText);
alert(req.responseXML);
и ищите ошибки php
Комментарии:
1. responseText содержал фактический XML. Был символ duff, отличный от ASCII, который не был пойман или удален при вставке, поэтому он сделал недействительным набор данных XML, когда он создавался диспетчером. теперь решено.
Ответ №2:
я решил проблему вчера после дополнительной отладки кода и изучения данных в базе данных. был символ, отличный от ASCII, который делал недействительным набор данных XML. исходный программист не заключал значения узлов в блоки CDATA.