2009-05-08 14 views
1

私はJQuery .ajaxメソッドを使用してXMLで単純なPHPクエリの結果を取得しています。問題)。しかし、メインプロジェクト内から受け取ったXMLの結果は、Firebugのコンソールで結果を表示するときに期待していたもの(PHPファイルを表示するだけでテストしたもの)とは異なります。また、これをもう一度試してみましたが、新しいPHPファイルを作成して、Ajax呼び出しを実行し、結果が正しいことを期待しています。JQueryを使用して、同じPHPパラメータを持つ同じPHPファイルのAJAX XML結果が異なる

[更新]:これをもう一度テストしたところ、プロジェクト内で正しい結果が得られましたが、ページを更新すると間違った結果が再び表示されます。

は、テストのために、私はすべての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> 

主プロジェクト

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 
と応答は次のとおりです:私のメインのプロジェクトからAJAX呼び出しからFirebugのヘッダがある

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

いわゆるとき、何らかの理由で、内側のXMLノードは結果から省略されていますメインプロジェクトから

私の主なプロジェクトには何らかの形で干渉しなければならないものがあると思いますが、私はそれを理解できません。どんな助けでも大歓迎です!

+0

Holy tl; dr! (実際には、私は試していません) – cgp

+0

両方のクエリが同じ環境内の同じデータベースに当たっていますか? – Chad

答えて

0

私の推測では、mysql_fetch_arrayの代わりにmysql_fetch_assocを使用する必要があります。 mysql_fetch_arrayは数値インデックスを持つ配列構造体を提供します。 mysql_fetch_assocはあなたが探しているように$ array [column_name]を提供します。

+0

その良い点はありますが、私は変更を加えようとしましたが、同じ問題を抱えています。 –

0

私はそれがmysql接続の問題だと思います。選択は何も実行されていません。デバッグするには、echo {hello}をwhile {}に追加して、それがまったく表示されているかどうかを確認してください:)

+0

選択が実行されているようです。なぜなら、PHPファイルを単独で実行すると、 AJAXを介して呼び出すと、結果は異なります(パラメータが送信されていなくても) –

+0

ajaxでデータを投稿しようとします。私は.net上のWebサービスコールで同じことをしました。私は "getFriends"はメソッドだと思いますが、それは全く呼び出されていません。 – balint

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); 
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", 
... 

幸運!

関連する問題