2009-08-11 18 views
20

Tengo problemas con mi script jquery a continuación, esta es una versión básica simplificada e incluso no funciona, tengo el archivo php que el script jquery hace una llamada para, lo tengo configurado para codificar y mostrar una respuesta jsonCómo obtener la respuesta jSON en la variable desde un script jquery

Luego en el script jquery debe leer el valor y responder a él, pero no está recibiendo la respuesta.

¿Es json.response la forma incorrecta de llamar a una variable en la cadena json que es la respuesta del nombre?

Puede alguien por favor ayuda estoy atrapado

<?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> 

ACTUALIZACIÓN;

He cambiado
json.response

en

data.response

Pero esto no lo hacen ya sea ork

Respuesta

27

Aquí está la secuencia de comandos, reescrito para utilizar las sugerencias anteriores y un cambio a su método de no-caché.

<?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> 

El principal problema aquí fue que había un error en el JSON que regresabas ("resonse" en lugar de "respuesta". Esto significaba que estaban buscando la propiedad mal en el código JavaScript. Una forma de la captura de estos problemas en el futuro es console.log el valor de data y asegúrese de que la propiedad que busca está allí.

Learning how to use the Chrome debugger tools (o herramientas similares en Firefox/Safari/Opera/etc.) también será de gran valor.

5

Debe utilizar data.response en su lugar de JS json.response .

+0

Lo he intentado pero no ha sido diferente – JasonDavis

+0

puede comprobar de qué tipo son sus datos. 'alerta (tipo de datos);' en devolución de llamada exitosa debería hacerlo. – RaYell

+0

dice "objeto" – JasonDavis

4

Su matriz PHP se define como:

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

Aviso del mispelling "resonse". Además, como mencionó RaYell, debe usar data en lugar de json en su función success porque su parámetro es actualmente data.

Intente editar su archivo PHP para cambiar el formulario de ortografía resonse al response. Debería funcionar entonces.

+0

gracias ese era el problema, lo pillé en 1 área del guión pero me perdí esa parte – JasonDavis

Cuestiones relacionadas