不同的AJAX XML来自使用JQuery的具有相同POST参数的相同PHP文件

时间:2009-05-08 19:08:01

标签: php javascript jquery xml ajax

我正在使用JQuery .ajax方法来获取XML中的简单PHP查询的结果(我在这个项目中已经做了很多次没有问题)。但是,在我的主项目中收到的XML结果与我在Firebug控制台中查看结果时所期望的(通过简单地查看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节点。

我猜我的主项目中有些东西必须以某种方式干扰,但我无法弄明白。非常感谢任何帮助!

4 个答案:

答案 0 :(得分:0)

我的猜测是你应该使用mysql_fetch_assoc而不是mysql_fetch_array。 mysql_fetch_array将为您提供带有数字索引的数组结构。 mysql_fetch_assoc将为您提供$ array [column_name],就像您正在寻找的那样。

答案 1 :(得分:0)

我认为这是一个mysql连接问题;无论如何,选择不运行。要进行调试,在while {}中添加一个echo“hello”,看看它是否完全显示:)

答案 2 :(得分:0)

在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);

答案 3 :(得分:0)

好像你没有从数据库中获取数据。如果你这样做会发生什么

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",
...
祝你好运!