2013-04-03 2 views
2

Кажется, что мой javascript не подбирает мой php, отправляющий XML-документ. PHP код:Javascript не может интерпретировать возвращенный xml

$domtree = new DOMDocument('1.0', 'UTF-8'); 

/* append it to the document created */ 
$xmlRoot = $domtree->appendChild($domtree->createElement("root")); 

foreach (glob('./img/photos/*.*') as $filename) { 
    //echo $filename; 
    $xmlRoot->appendChild($domtree->createElement("image",$filename)); 
} 

/* get the xml printed */ 
echo $domtree->saveXML(); 

Выход выше код выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?> 
<root><image>./img/photos/2012-02-26 17.02.12.jpg</image> 
<image>./img/photos/2012-03-09 08.21.48.jpg</image> 
<image>./img/photos/2012-07-21 14.09.39.jpg</image> 
<image>./img/photos/2012-07-25 15.25.17.jpg</image> 
<image>./img/photos/2012-08-04 17.54.38.jpg</image> 
<image>./img/photos/2012-08-04 23.36.30.jpg</image> 
<image>./img/photos/2012-08-06 06.08.43.jpg</image> 
<image>./img/photos/2012-08-07 20.57.34.jpg</image> 
<image>./img/photos/2012-08-09 20.40.11.jpg</image> 
<image>./img/photos/2012-08-25 20.54.05.jpg</image> 
<image>./img/photos/2012-09-07 11.19.50.jpg</image> 
<image>./img/photos/2012-09-08 15.53.27.jpg</image> 
<image>./img/photos/2013-01-30 19.19.16.jpg</image> 
<image>./img/photos/2013-01-31 09.48.39.jpg</image></root> 

Вызов этого с помощью AJAX, когда я называю AJAXRequest.responseXML я получить нуль назад.

EDIT: AJAX запрос Код:

+0

Что такое код AJAX? Также назовите его напрямую, напишите назад, что является выходом php, чтобы мы могли видеть, что Javascript пытается разобрать. – PhoneixS

+0

см. Ответы [здесь] (http://stackoverflow.com/questions/1013582/ajax-responsexml-errors) – 2013-04-03 16:07:58

+0

Является ли ваш PHP-скрипт правильным заголовком 'Content-Type'? См. Http://stackoverflow.com/a/3272572/156755 для получения дополнительной информации – Basic

ответ

0

Если вы не используете какой-либо сторонней библиотеки, попробуйте этот вид фрагмента кода (изменить его в соответствии с вашими требованиями)

var request = window.ActiveXObject ? 
     new ActiveXObject('Microsoft.XMLHTTP') : 
     new XMLHttpRequest; 

    request.onreadystatechange = function() { 
    if (request.readyState == 4) { 
     request.onreadystatechange = doNothing; 
     callback(request.responseText, request.status); 
    } 
    }; 

    request.open('GET', url, true); 
    request.send(null); 

Обратите внимание, что он использует request.responseText, и он обязательно получит возвращаемый xml, если вы добавите тип контента как header("Content-type: text/xml"); в свой заголовок

UPDATE

Для разбора XML, вы можете использовать приведенный ниже фрагмент кода:

function parseXml(str) { 
    if (window.ActiveXObject) { 
    var doc = new ActiveXObject('Microsoft.XMLDOM'); 
    doc.loadXML(str); 
    return doc; 
    } else if (window.DOMParser) { 
    return (new DOMParser).parseFromString(str, 'text/xml'); 
    } 
} 

function doNothing() {} //use this for some processing at run time 
+0

Любые причины не использовать jQuery и избегать необходимости делать броузер самостоятельно? Кроме того, вы не разбираете XML в удобном для использования формате, просто перекликаетесь со строкой – Basic

+0

Да, jQuery лучше всего использовать здесь .. но я считаю, что @jaysee не использует его, поэтому он добавит еще одну кривую обучения прямо сейчас? И да xml анализируется Я только что предложил соответствующий код – gaurav

+0

Только причина, по которой я не использую jQuery, заключается в том, что я этого не знаю. Кроме того, я бы предпочел избежать какого-либо конкретного кода на платформе (ActiveX - это только окна, не так ли?) – JaySee

1

Попробуйте отправить тип содержимого в PHP так AJAX знаю, что это XML и разобрать его (помните, что это должно быть сделано до любого echo):

header("Content-Type: text/xml"); 

Это также может быть принужден непосредственно в JavaScript (с overrideMimeType()), но лучше сделать в PHP.

Смежные вопросы