我正在使用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节点。
我猜我的主项目中有些东西必须以某种方式干扰,但我无法弄明白。非常感谢任何帮助!
答案 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",
...
祝你好运!