Различные результаты AJAX XML из одного и того же PHP-файла с одинаковыми параметрами POST с использованием JQuery - PullRequest
1 голос
/ 08 мая 2009

Я использую метод JQuery .ajax, чтобы получить результаты простого PHP-запроса в XML (который я неоднократно выполнял в этом проекте без проблем). Тем не менее, результат XML, который я получаю из своего основного проекта, отличается от того, что я ожидаю (что было проверено простым просмотром файла PHP) при просмотре результатов в консоли Firebug. Я также проверил это снова, создав новый файл PHP, единственной функцией которого является запуск вызова ajax, и результаты были правильными, как и ожидалось.

[Обновление]: я только что снова проверил это, и я получил правильные результаты из своего проекта, но когда я обновляю страницу, я снова получаю неправильные результаты.

Ради тестирования я упростил процесс, удалив все данные POST и функцию обратного вызова success, но я все еще получаю другие результаты.

Вот фрагменты кода:

AJAX-вызов JQuery (используется как в тестовом файле, так и в моем проекте):

    $.ajax({
        url:"./lib/ajax_friends.php",
        type:"POST",
     //   data:{action : "getFriends", userID: userID} ,
        dataType: 'xml',
        sync:false,
        error:function(request){alert("error")},
        success:function(theXML){
        }
   })

Код PHP:

$userID='11';
    $sql = "SELECT ID, name, pic_square FROM users WHERE ID = $userID";
    $result = mysql_query($sql) or die(mysql_error());

    $xml = "";
    while($array = mysql_fetch_array($result)) {
        $ID = $array['ID'];
        $Name = $array['name'];
        $pic_square = $array['pic_square'];
        $xml .= "<Friend>";
        $xml .= "<ID>$ID</ID>";
        $xml .= "<Name>$Name</Name>";
        $xml .= "<Pic>$pic_square</Pic>";
        $xml .= "</Friend>";
    }

    header('Content-Type: application/xml; charset=ISO-8859-1');
    header("Cache-Control: no-cache, must-revalidate");
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");

    echo "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>";
    echo "<Friends>";
    echo $xml;
    echo "</Friends>";

Примечание. Я попытался изменить заголовки, чтобы принудительно выполнить полное обновление, но это все равно не помогло

Тестовый файл Заголовки из Firebug тестового PHP-файла (который возвращает правильные результаты):

Response Headers
Date    

Fri, 08 May 2009 18:53:34 GMT

Server  

Apache/2.2.9 (Unix) mod_ssl/2.2.9 OpenSSL/0.9.7l DAV/2 PHP/5.2.6

X-Powered-By    

PHP/5.2.6

Cache-Control   

no-cache, must-revalidate

Expires 

Mon, 26 Jul 1997 05:00:00 GMT

Content-Length  

200

Keep-Alive  

timeout=5, max=98

Connection  

Keep-Alive

Content-Type    

application/xml; charset=ISO-8859-1

Request Headers
Host    

localhost

User-Agent  

Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.0.10) Gecko/2009042315 Firefox/3.0.10

Accept  

application/xml, text/xml, */*

Accept-Language 

en-us,en;q=0.5

Accept-Encoding 

gzip,deflate

Accept-Charset  

ISO-8859-1,utf-8;q=0.7,*;q=0.7

Keep-Alive  

300

Connection  

keep-alive

X-Requested-With    

XMLHttpRequest

Referer 

http://localhost/~Seeff/testajax.php

Cookie  

a7c768c2549daf4a7f69b9916bab5a38=4555bf36cf1b308f19a12f8da6944b80; a7c768c2549daf4a7f69b9916bab5a38_user
=507514167; a7c768c2549daf4a7f69b9916bab5a38_ss=kKgqsUlOrFArzo9Nrv2Zyg__; a7c768c2549daf4a7f69b9916bab5a38_session_key
=3.qPXakpbNIIX_bvndm_5gnA__.86400.1241895600-507514167; a7c768c2549daf4a7f69b9916bab5a38_expires=1241895600
; fbsetting_a7c768c2549daf4a7f69b9916bab5a38=%7B%22connectState%22%3A1%2C%22oneLineStorySetting%22%3A1
%2C%22shortStorySetting%22%3A1%2C%22inFacebook%22%3Afalse%7D

И ответ:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Friends><Friend><ID>12</ID><Name>XXX
</Name><Pic>http://something</Pic></Friend></Friends>

Основной проект Заголовки Firebug от вызова ajax из моего основного проекта:

Response Headers
Date    

Fri, 08 May 2009 18:53:41 GMT

Server  

Apache/2.2.9 (Unix) mod_ssl/2.2.9 OpenSSL/0.9.7l DAV/2 PHP/5.2.6

X-Powered-By    

PHP/5.2.6

Cache-Control   

no-cache, must-revalidate

Expires 

Mon, 26 Jul 1997 05:00:00 GMT

Content-Length  

74

Keep-Alive  

timeout=5, max=98

Connection  

Keep-Alive

Content-Type    

application/xml; charset=ISO-8859-1

Request Headers
Host    

localhost

User-Agent  

Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.0.10) Gecko/2009042315 Firefox/3.0.10

Accept  

application/xml, text/xml, */*

Accept-Language 

en-us,en;q=0.5

Accept-Encoding 

gzip,deflate

Accept-Charset  

ISO-8859-1,utf-8;q=0.7,*;q=0.7

Keep-Alive  

300

Connection  

keep-alive

X-Requested-With    

XMLHttpRequest

Referer 

http://localhost/~Seeff/

Cookie  

a7c768c2549daf4a7f69b9916bab5a38=4555bf36cf1b308f19a12f8da6944b80; a7c768c2549daf4a7f69b9916bab5a38_user
=507514167; a7c768c2549daf4a7f69b9916bab5a38_ss=kKgqsUlOrFArzo9Nrv2Zyg__; a7c768c2549daf4a7f69b9916bab5a38_session_key
=3.qPXakpbNIIX_bvndm_5gnA__.86400.1241895600-507514167; a7c768c2549daf4a7f69b9916bab5a38_expires=124
1895600

И ответ:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Friends></Friends>

Так что по какой-то причине внутренний XML-узел исключается из результатов при вызове из основного проекта.

Я предполагаю, что в моем основном проекте есть что-то, что должно каким-то образом вмешиваться, но я просто не могу понять это. Любая помощь с благодарностью!

Ответы [ 4 ]

0 голосов
/ 30 мая 2009

Похоже, вы не получаете данные из БД. Что произойдет, если вы просто сделаете это

echo "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>";
echo "<Friends>";
echo "<Test>Hello</Test>";
echo "</Friends>";

вместо этого? Если это действительно проблема с кешем, то добавление случайного параметра в URL должно заставить браузер обновиться. Т.е. это должно работать:

$.ajax({
    url:"./lib/ajax_friends.php?random987398792374",
...

Удачи!

0 голосов
/ 09 мая 2009

Я думаю, что это проблема подключения MySQL; выбор не работает в любом случае. Для отладки добавьте echo "hello" в while {} и посмотрите, будет ли он отображен вообще:)

0 голосов
/ 27 мая 2009

В firebug щелкните правой кнопкой мыши вызов AJAX и выберите «Открыть в новой вкладке». Firefox должен правильно отформатировать XML (если вы делаете header("Content-Type: application/xml"), как должны). Посмотрите на запрос, который он отправляет (в окне местоположения). Перезагрузите его несколько раз. Распечатайте данные в файле PHP, которые, по вашему мнению, должны быть установлены.

Извините, я не могу больше помочь, но это звучит как какая-то глупая ошибка где-то.

Кроме того, вы можете просто собрать данные в виде массива, а затем использовать JSON (мой предпочтительный метод).

Более того, вы НИКОГДА не должны делать инъекцию параметров в SQL. Бери очень опасно. Используйте что-то вроде PDO.

$userID='11';
$PDO = new PDO("mysql:dbname=mydb", "uname", "pword");

$stmt = $PDO->prepare("SELECT ID, name, pic_square FROM users WHERE ID = :userID");
$stmt->execute(array("userID" => $userID)) or die (print_r($PDO->errorInfo(), TRUE));

$output = array();
while($row = $stmt->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_NEXT)) {
    $output = $row;
}

header('Content-Type: application/json; charset=ISO-8859-1');
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");

print json_encode($output);
0 голосов
/ 08 мая 2009

Полагаю, вы должны использовать mysql_fetch_assoc вместо mysql_fetch_array. mysql_fetch_array даст вам структуру массива с числовыми индексами. Где mysql_fetch_assoc даст вам массив $ [column_name], который вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...