За последние 24 часа нас посетил 15821 программист и 1546 роботов. Сейчас ищут 810 программистов ...

AJAX не понимаю что возвращает XML

Тема в разделе "PHP для новичков", создана пользователем Mysa, 28 ноя 2010.

  1. Mysa

    Mysa Активный пользователь

    С нами с:
    19 июл 2010
    Сообщения:
    16
    Симпатии:
    0
    Передаю в php-скрипт массив значений, он по ним выбирает из базы все что нужно и возвращает в виде XML-дока. Вот только возвращает он целую кучу непонятного одинакого го..а.
    Вот собственно код, который должен бы мне сгенерить XML:
    Код (Text):
    1.  
    2. <?php
    3.  
    4. $db = mysql_connect("localhost", "root", "***") or die("Can`t connect!!!");
    5. mysql_select_db("****", $db);
    6. mysql_query("SET NAMES cp866;", $db);
    7.  
    8. header("Content-Type: text/xml");
    9.  
    10. $idRTU=0;
    11.  
    12. if (isset($_POST['idRTU']))
    13.     $idRTU=$_POST['idRTU'];
    14. if (isset($_POST['idType']))
    15.     $idType=$_POST['idType'];
    16. if (isset($_POST['PointName[]']))
    17.     $PointName[]=$_POST['PointName[]'];
    18.  
    19.  
    20. $DivID=0;
    21.  
    22. $dom=new DOMDocument("1.0", "cp866");
    23.  
    24. $response=$dom->createElement('response');
    25. $dom->appendChild($response);
    26.  
    27. foreach($PointName as $Point)
    28. {
    29.  
    30.     $idPoint_set=mysql_query("SELECT idPoint, PointIndex From Points Where PointName='$Point' and idType=$idType and idRTU=$idRTU;");
    31.     if (mysql_num_rows($idPoint_set)>0)
    32.     {
    33.         $idPoint=mysql_fetch_row($idPoint_set);
    34.         if ($idType==1)
    35.             $Value_set=mysql_query("SELECT * from analogdynamics where idPoint=$idPoint[0]");
    36.         if ($idType==3)
    37.             $Value_set=mysql_query("SELECT * from statusdynamics where idPoint=$idPoint[0]");
    38.         if ($idType==2)
    39.             $Value_set=mysql_query("SELECT * from counterdynamics where idPoint=$idPoint[0]");
    40.    
    41.         if (mysql_num_rows($Value_set)>0)
    42.         {
    43.             $Value=mysql_fetch_row($Value_set);
    44.        
    45.             $point=$dom->createElement('point');
    46.             $pointText=$dom->createTextNode('$Value[1]');
    47.             $point->appendChild($pointText);
    48.             $response->appendChild($point);
    49.         }
    50.         else
    51.         {
    52.             $TypeRF=$idType-1;
    53.             mysql_query("INSERT INTO Dynamics Values($idPoint[0], idPoint[1], $TypeRF, 0);");
    54.        
    55.             $point=$dom->createElement('point');
    56.             $pointText=$dom->createTextNode('ЗАПРОС');
    57.             $point->appendChild($pointText);
    58.             $response->appendChild($point);
    59.         }  
    60.     }
    61.  
    62. }
    63.  
    64.  
    65. $xmlStr=$dom->saveXML();
    66. echo $xmlStr;
    67.  
    68. ?>
    а засылаю туда данные вот так:
    Код (Text):
    1.  
    2.     if (xmlHttp)
    3.     {
    4.         CountDiv = document.getElementById("count");
    5.         var counter=CountDiv.innerHTML;
    6.         RTUDiv=document.getElementById("idRTU");
    7.         Type = 2;
    8.  
    9.         var POSTStr="idType=3"+"&idRTU="+RTUDiv.innerHTML;
    10.    
    11.         for (a=1; a<counter; a++)
    12.         {
    13.             try
    14.             {
    15.             idSTR="PointName"+a;
    16.             PointNameDiv=document.getElementById(idSTR);
    17.             }
    18.             catch(e)
    19.             {
    20.             alert("Cant get element!" + a);
    21.             }
    22.             POSTStr+="&PointName["+a+"]="+PointNameDiv.innerHTML;          
    23.         }
    24.  
    25.         try
    26.         {
    27.             xmlHttp.open("POST", "PointDynamicScan.php", true);
    28.             xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    29.             xmlHttp.onreadystatechange = DynCallBack;
    30.             xmlHttp.send(POSTStr);
    31.         }
    32.         catch(e)
    33.         {
    34.             alert("Cant send request!!!");
    35.         }      
    36.     }  
    Возвращает в результате кучу одинаковых значений "ǀϐΑ"; Т.е. есть XML страничка, в ней правильная структура документа но TextNode втюхивается туда неправильно. Может с кодировкой что-то надо домудрить?? О_О
     
  2. Mysa

    Mysa Активный пользователь

    С нами с:
    19 июл 2010
    Сообщения:
    16
    Симпатии:
    0
    Вот еще покопался немного и появился вопрос.
    Попробовал отказаться от XML и получать responseText. Отсюда и вопрос: а его можно обрабатывать просто как строку или есть какая-то специфика? И можно ли из полученного текстового ответа жрать элементы по id, как при работе с document?
     
  3. Mysa

    Mysa Активный пользователь

    С нами с:
    19 июл 2010
    Сообщения:
    16
    Симпатии:
    0
    Сделал все, заработало с текстовым вариантом. Принес на работу - слил www в localhost, но увы! Ругается на foreach()
    Вот код:
    Код (Text):
    1.  
    2. if (isset($_POST['idRTU']))
    3.     $idRTU=$_POST['idRTU'];
    4. if (isset($_POST['idType']))
    5.     $idType=$_POST['idType'];
    6. if (isset($_POST['PointName[]']))
    7.     $PointName[]=$_POST['PointName[]'];
    8. if (isset($_POST['DivNumber']))
    9.     $DivNumber=$_POST['DivNumber'];
    10.  
    11. $DivID=0;
    12.  
    13.  
    14. foreach($PointName as $Point) // <---вот на эту строку говорит неверный аргумент
    15. { ...
    Передается вроде нормальная POST-строка вида ...&PointName[n]=blabla&... Что ему не нравитццо??