我正在使用JQuery .ajax方法来获取XML中的简单PHP查询的结果(我在该项目中已经完成了很多次而没有问题)。但是,在Firebug控制台中查看结果时,我从主项目中收到的XML结果与期望的结果不同(仅通过查看PHP文件进行了测试)。我还通过创建一个新的PHP文件(它的唯一功能是运行ajax调用)来再次测试了此结果,结果与预期的一样正确。

[更新]:我刚刚再次进行了测试,并且从项目中收到了正确的结果,但是刷新页面时,我又得到了错误的结果。

为了进行测试,我通过删除所有POST数据和成功的回调函数简化了过程,但仍然得到不同的结果。

以下是代码片段:

JQuery ajax调用(在测试文件和项目中均使用):

    $.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>";


注意:我尝试更改标题以强制完全刷新,但是仍然没有帮助

测试文件
测试PHP文件的Firebug标头(返回正确的结果是):

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>


主要项目
来自我的主项目的ajax调用的Firebug标头是:

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节点将从结果中省略。

我猜我的主项目中有些东西必须以某种方式进行干预,但我只是想不通。任何帮助是极大的赞赏!

最佳答案

我的猜测是您应该使用mysql_fetch_assoc而不是mysql_fetch_array。 mysql_fetch_array将为您提供带有数字索引的数组结构。 mysql_fetch_assoc将在您想要的位置为您提供$ array [column_name]。

08-17 21:53
查看更多