JQuery kullanarak aynı POST parametreleri ile aynı PHP dosyadan farklı AJAX XML sonuçları

4 Cevap php

(Ben bir sorun olmadan bu proje kapsamında çeşitli kez yaptık) XML basit bir PHP sorgu sonuçları almak için JQuery. Ajax yöntemi kullanıyorum. Ancak, benim ana proje içinde aldığınız XML sonuç Firebug'ın konsolunda Sonuçları görüntüleme zaman (sadece PHP dosyasını görüntüleyerek test gibi) beklemek ne kadar farklı olduğunu. Ben de olan tek işlevi ajax arama çalışmasına ve beklendiği gibi sonuçlar, doğru, yeni bir PHP dosyası oluşturarak yine bu test.

[Güncelleme]: Ben sadece tekrar bu test, ve benim proje içinde doğru sonuçlar aldı, ama ben sayfayı yenileyin, ben yine yanlış sonuç almak.

Test aşkına, ben tüm POST veri ve başarı geri çağırma işlevi kaldırarak işlemi basitleştirilmiş, ama ben yine de farklı sonuçlar elde ..

İşte kod parçacıkları şunlardır:

(Sınama dosyası hem de ve benim proje içinde kullanılan) JQuery ajax çağrı:

    $.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 kodu:

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

Not: Ben tam bir yenilenmeye zorlamak için başlıklarını değiştirmeyi denedim, ama yine de yardım etmedi

Test File The headers from Firebug of the test PHP file (which returns the correct results are):

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

Ve Yanıt olduğunu:

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

Main Project The Firebug headers from the ajax call from my main project are:

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

Ve yanıttır:

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

Ana projeden çağrıldığında Yani nedense, iç XML düğümü sonuçları ihmal ediliyor.

Orada bir şekilde müdahale edilmelidir benim ana projede bir şey, ama ben sadece bunu anlamaya olamaz tahmin ediyorum. Herhangi bir yardım büyük beğeni topluyor!

4 Cevap

Benim tahminim mysql_fetch_assoc yerine mysql_fetch_array kullanarak olmalıdır edilir. mysql_fetch_array size sayısal indeksler ile bir dizi yapı verecektir. Aradığınız gibi mysql_fetch_array [sütun_ismi] size $ dizi verecek yerde.

Ben bir mysql bağlantı sorunu olduğunu düşünüyorum; select zaten çalışmıyor. Debug ederken {} için bir yankı "merhaba" eklemek ve bu hep ya gelirse bakın :)

Kundakçı olarak, sağ sonra seçin, AJAX çağrı üzerine tıklayın "yeni sekmede açın." (Eğer header("Content-Type: application/xml") Eğer gerektiği gibi yapıyorsun) Firefox sizin için güzel XML biçimlendirmek gerekir. O (yeri kutusunda) gönderiyor isteği bak. Bunu birkaç kez yeniden. Ayarlamak gerektiğini düşünüyorum PHP dosyası verileri yazdırabilirsiniz.

Ben daha fazla yardımcı olamadığım için üzgünüm ama somwhere bazı aptalca bir hata gibi geliyor.

Alternatif olarak, sadece bir dizi olarak verileri oluşturmak, ve sonra JSON (benim tercih edilen yöntem) kullanabilirsiniz.

Daha fazla bir şey üzerinde, SQL içine parametre enjeksiyon yapmak ASLA. Bery çok tehlikeli. PDO gibi bir şey kullanın.

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

Eğer db veri alma değil gibi görünüyor. Sadece bunu olsaydı ne olurdu

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

instead? If it really is a cache problem, then adding a random param to the URL should force the browser to update. Ie does this should work:

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

İyi şanslar!