2009-08-11 11 views
20

Aşağıdaki jquery komutumla ilgili bir sorun yaşıyorum, bu basit bir sürüm indirdi ve hatta çalışmayacak, jquery komut dosyasının bir çağrı yaptığı php dosyasına sahibim bir json cevabını kodlamak ve göstermek için ayarlıyorum.jSON yanıtı jquery komut dosyasından değişkene nasıl dönüşür?

Daha sonra jquery komut dosyasında değeri okumalı ve yanıt vermelidir, ancak yanıt almıyordur.

json.response, json dizesinde ad yanıtı olan bir değişkeni çağırmanın yanlış bir yolu mu?

birisi yardım ben

<?PHP 
header('Cache-Control: no-cache, must-revalidate'); 
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); 
header('Content-type: application/json'); 

// set to retunr response=error 
$arr = array ('resonse'=>'error','comment'=>'test comment here'); 
echo json_encode($arr); 
?> 

//the script above returns this: 
{"response":"error","comment":"test comment here"} 

<script type="text/javascript"> 
$.ajax({ 
    type: "POST", 
    url: "process.php", 
    data: dataString, 
    dataType: "json", 
    success: function (data) { 
     if (json.response == 'captcha') { 
      alert('captcha'); 
     } else if (json.response == 'error') { 
      alert('sorry there was an error'); 
     } else if (json.response == 'success') { 
      alert('sucess'); 

     }; 
    } 

}) 
</script> 

GÜNCELLEME şaşırıp misiniz; Ben

data.response

içine
json.response

değişti Ama bu ğ ya

cevap

27

Yukarıdaki öneriyi kullanmak için önbelleğe alma yönteminizdeki bir değişikliği içeren komut dosyası şöyledir.

<?php 
// Simpler way of making sure all no-cache headers get sent 
// and understood by all browsers, including IE. 
session_cache_limiter('nocache'); 
header('Expires: ' . gmdate('r', 0)); 

header('Content-type: application/json'); 

// set to return response=error 
$arr = array ('response'=>'error','comment'=>'test comment here'); 
echo json_encode($arr); 
?> 

//the script above returns this: 
{"response":"error","comment":"test comment here"} 

<script type="text/javascript"> 
$.ajax({ 
    type: "POST", 
    url: "process.php", 
    data: dataString, 
    dataType: "json", 
    success: function (data) { 
     if (data.response == 'captcha') { 
      alert('captcha'); 
     } else if (data.response == 'success') { 
      alert('success'); 
     } else { 
      alert('sorry there was an error'); 
     } 
    } 

}); // Semi-colons after all declarations, IE is picky on these things. 
</script> 

ana konu burada Bu, JavaScript kodu yanlış özelliği aradığınız anlamına geliyordu. Bunun yerine "tepki" nin ("resonse" dönen JSON baskı hatası vardı. Tek yönlü bu sorunların gelecekte yakalamanın data değerini console.log ve aradığınız özellik olduğundan emin olun.

Learning how to use the Chrome debugger tools etmektir (veya Firefox/Safari/Opera/vb. benzer araçları) da çok değerli olacaktır.

5

Sen json.response yerine JS data.response kullanmalıdır yapmadığını

.

$arr = array ('resonse'=>'error','comment'=>'test comment here'); 

Uyarı yazım hatasından "resonse":

+0

Bunu denedim ancak farklı bir – JasonDavis

+0

yapamadıkları verilerinizin ne tür olduğunu kontrol edebilirsiniz. 'Uyarı (typeof veri); 'başarı geri çağırma yapmalısınız. – RaYell

+0

"object" yazıyor – JasonDavis

4

PHP dizi olarak tanımlanır. Ayrıca, RaYell'in de belirttiği gibi, data parametresinin data olması nedeniyle json yerine data işlevini success işlevinde kullanmanız gerekir.

resonse yazım formunu response olarak değiştirmek için PHP dosyanızı düzenlemeyi deneyin. O zaman işe yaramalı.

+0

teşekkürler, sorun buydu, senaryodaki 1 alanda yakaladım ama o bölümü kaçırdım – JasonDavis