Jump to content
  • 0

проблема с responseXML возвращает null


bgraf
 Share

Question

Добрый день!

Делаю связанные селекты с помощью ajax

Не могу понять почему после выполнения нижеприведенного кода responseXML возвращает null:

<?php

// Соединяемся с сервером базы данных


if ( isset($_GET['company']) )
{
// Получаем из БД список артикулов
$query = 'SELECT *
FROM '.$_GET['company'].'
WHERE type_light ="'.$_GET['category'].'"';
$res = mysql_query( $query );
$makerOptions = '<option value="0">Выберите</option>';
while ( $mkr = mysql_fetch_array( $res ) )
{
$makerOptions = $makerOptions.'<option value="'.$mkr['article'].'">'.$mkr['article'].'</option>';
}

$response = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'.
'<response>'.
'<action>'.
'makeMakerList'.
'</action>'.
'<options>'.
$makerOptions.
'</options>'.
'</response>';


}

header('Content-Type: text/xml');
echo $response;
?>

подскажите что делаю не так

Спасибо всем заранее

Edited by bgraf
Link to comment
Share on other sites

11 answers to this question

Recommended Posts

  • 0

давайте я все страницы выложу

search.php

<?php
// Соединяемся с сервером базы данных

?>


<form action="search.php" method="post">
<div>
<table>
<tr>
<td>Коипания: <select name="company" id="company">
<option value="0" selected>Выберите компанию</option>
<option value="deltalight" >Delta Light</option>
<option value="dark" >Dark</option>
<option value="kreon">Kreon</option>
<option value="aquacreation" >Aqua Creations</option>
<option value="nomon" >Nomon</option>
<option value="muranodue" >Murano Due</option>
<option value="aurelianotoso">Aureliano Toso</option>
<option value="itre" >Itre</option>
<option value="altlucealternative">Alt Luce alternative</option>
<option value="axolight" >Axo Light</option>
<option value="gallery" >Gallery</option>
<option value="weverducre">Wever&Ducr?</option>
<option value="ilparalumemarine" >il paralume marine</option>
</select><br/>
</td>
<td>Тип светильника:
<select name="category" id="category" onchange="getArticul(this.form.elements['company'].value, this.value);">
<option value="0" selected>Выберите</option>
<option value="download_lighting" >встраеваемые светильники</option>
<option value="wall_ceiling_lighting" >настенно-потолочные</option>
<option value="sospension_lighting" >подвесные светильники</option>
<option value="floor_lighting" >напольные светильники</option>
<option value="table_lighting" >настольные светильники</option>
<option value="outdoor_lighting" >уличное освещение</option>
<option value="project" >Проекты</option>
</select><br/>
</td>
<td>Артикул: <select name="product" id="product"><option value="0">Выберите</option></select></td>
</tr>
</table>
</div>
</form>

search.js

var xmlhttp = null;

function getArticul(com, kat)
{

var element_product = document.getElementById("product");
element_product.innerHTML = ""; // Удаляем всех потомков
var option = document.createElement("option");
var optionText = document.createTextNode("Борис");
option.appendChild(optionText);
option.setAttribute("value", "0");
element_product.appendChild(option);
if ( com != "" && kat!="" )
{
url = "getArticul.php?company=" + com + "&category=" + kat;

}
var xmlhttp = getXmlHttp();
xmlhttp.open('GET', url, true);
xmlhttp.onreadystatechange = processRequestChange;
xmlhttp.send(null);
}


//================================================================================
=====


function getXmlHttp()
{

try
{
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (E)
{
xmlhttp = false;
}
}
if (!xmlhttp && typeof XMLHttpRequest!='undefined')
{
xmlhttp = new XMLHttpRequest();
}


return xmlhttp;
}

//================================================================================
=====

function processRequestChange()
{
alert('xmlhttp.readyState = '+xmlhttp.readyState);
if (xmlhttp.readyState == 4)
{
if(xmlhttp.status == 200)
{
alert('xmlhttp.responseXML = '+xmlhttp.responseXML);
var responseXml = xmlhttp.responseXML;
alert('responseXml.documentElement = '+responseXml.documentElement);
var xmlDoc = responseXml.documentElement;
alert('xmlDoc.getElementsByTagName("action")[0].firstChild.data = '+xmlDoc.getElementsByTagName("action")[0].firstChild.data);
var action = xmlDoc.getElementsByTagName("action")[0].firstChild.data;

alert('action = '+action);

if ( action == "makeMakerList" )
{
_select = document.getElementById("product");
}

_select.innerHTML = ""; // Удаляем всех потомков
options = xmlDoc.getElementsByTagName("option");
for (var i=0; i<options.length; i++)
{

// Извлекаем значение атрибута value и текст
var value = options[i].getAttribute("value");
var text = options[i].firstChild.data;
//Формируем очередной элемент option
var option = document.createElement("option");
var optionText = document.createTextNode(text);
option.appendChild(optionText);
option.setAttribute("value", value);
_select.appendChild(option);
}
}
else
{
alert("Не удалось получить данные от сервера:\n" + xmlhttp.statusText);
}
}
else
{
alert("статуса Error");
}
}

getArticul.php

<?php

// Соединяемся с сервером базы данных


// Если выбрано значение первого списка - формируем второй список
if ( isset($_GET['company']) )
{
// Получаем из БД список артикулов
$query = 'SELECT *
FROM '.$_GET['company'].'
WHERE type_light ="'.$_GET['category'].'"';
$res = mysql_query( $query );
$makerOptions = '<option value="0">Выберите</option>';
while ( $mkr = mysql_fetch_array( $res ) )
{
$makerOptions = $makerOptions.'<option value="'.$mkr['article'].'">'.$mkr['article'].'</option>';
}

$response = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'.
'<response>'.
'<action>'.
'makeMakerList'.
'</action>'.
'<options>'.
$makerOptions.
'</options>'.
'</response>';

//$fp = fopen ("ddd.xml", "a+");
//fputs($fp,$response);
//fclose($fp);
}
header('Content-Type: text/xml');
echo $response;
?>

эмм... у вас таблица в бд так и называется: '.$_GET['company'].' ? smile.gif

нет методом get я передаю имя компании которая в базе и является таблицей, селект проверил и файл xml тоже создавал все данные верны

Edited by bgraf
Link to comment
Share on other sites

  • 0

А если так?

textans=obj.responseText;
if (window.DOMParser) //Обрабатываем текст как xml
{
parser=new DOMParser();
xml=parser.parseFromString(textans,"text/xml");
}
else // Internet Explorer
{
xml=new ActiveXObject("Microsoft.XMLDOM");
xml.async="false";
xml.loadXML(textans);
}

Link to comment
Share on other sites

  • 0
А если так?

textans=obj.responseText;
if (window.DOMParser) //Обрабатываем текст как xml
{
parser=new DOMParser();
xml=parser.parseFromString(textans,"text/xml");
}
else // Internet Explorer
{
xml=new ActiveXObject("Microsoft.XMLDOM");
xml.async="false";
xml.loadXML(textans);
}

Спасибо за ответ. Но, мммм, не очень нрнимаю куда мне это прикрутить, прошу прощение за свое непонимание, объясните куда это надо вставить?

Link to comment
Share on other sites

  • 0

а попробуй вот этот кусок запихнуть в самое-самое начало кода (сейчас он у тебя в конце):

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

дело в том, что у тебя текст как я понял не преобразуется в формат xml, а происходит это потому, что заголовки должны посылаться в самом начале, а не в конце.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy