2011-04-21 23 views
21

Cada vez que ejecuto mi función ajax jquery recibo un error, esto se aplica a todas mis llamadas ajax. aquí es un ejemplo de mi códigoajax jquery siempre ejecutando Error

function FindContact(CompanyName,DivisionName,FirstName,LastName) { 

     $.ajax({ 
      url: 'Path', 
      dataType: "json", 
      async:false, 
      type:'post', 
      data: {'FirstName':FirstName,'LastName':LastName,'DivisionName':DivisionName,'CompanyName':CompanyName}, 
      success: DisplayContacts, 
      error: ErrorMsg 
     }); 
    } 

de evitar esto utilizo este

function ErrorMsg(result) { 
     if (result.status == 200 && result.statusText == 'OK') { 
      DisplayContacts(result); 
     } 
     else { 
      alert("FAILED : " + result.status + ' ' + result.statusText); 
     } 
    } 

esto es difícil porque tengo que crear método como este para cada petición Ajax.

¿por qué ejecuta el código de error 1st ???

Por favor ayuda!

+2

Asegúrese de que lo que está devolviendo es válido json. Si no es así, y todo va bien en el servidor, $ .ajax irá al error en lugar de al éxito. – locrizak

+0

Hola, - ¿Ha comprobado cuál es el código de estado (usando .alert())? - ¿Ha comprobado que la página de destino usa el mismo método para enviar los resultados? – reporter

+0

@locrizak: cómo comprobar que estoy devolviendo un json válido – David

Respuesta

44

Asegúrese de que lo que está devolviendo es válido json. Si no es así, y todo va bien en el servidor, $ .ajax irá al error en lugar de al éxito.

 
function FindContact(CompanyName,DivisionName,FirstName,LastName) { 

     $.ajax({ 
      url: 'Path', 
      dataType: "html or json", 
      async:false, 
      type:'post', 
      data: {'FirstName':FirstName,'LastName':LastName,'DivisionName':DivisionName,'CompanyName':CompanyName}, 
      success: DisplayContacts, 
      error: ErrorMsg 
     }); 
    } 
 

Una rápida de comprobar si el JSON es válida es simplemente cambiar tipo de datos a HTML y ver el éxito está siendo despedido. Si es que tu json no es válido, si sigues teniendo el mismo problema, te ocurre algo diferente.

Otra forma de comprobar si se está devolviendo json válido es abrir firebug y, cuando se envíe la solicitud, hacer clic en la pestaña de respuesta, copiar la respuesta y llegar a jsonlint.com para comprobar si es válida.

Jquery ajax docs

+0

Tienes razón. Funciona para html – David

+0

Cambiado a: dataType: "json" - ¡funciona como un encanto! –

2

Mi solución fue una diferencia en Accept-Tipo y cabeceras Content-Type. Si el encabezado Accept-Type de la solicitud del lado del cliente no coincide con el encabezado Content-Type de la respuesta del lado del servidor, Jquery llamará a la devolución de llamada de error.

Jquery, de forma predeterminada, establece el encabezado Accept-Type en application/json. Sin embargo, mi servidor estaba enviando una respuesta con Content-Type application/x-javascript. Mi solución fue cambiar el encabezado Content-Type de la respuesta del lado del servidor al application/json apropiado.

+0

¿cómo cambiaste el encabezado del tipo de contenido en el lado del servidor? +1 si me respondes – David

+2

¿Qué entorno del lado del servidor tienes? Estoy en php, así que el mío fue: 'header ('Content-Type: application/json');' – charltoons

2

Estaba enfrentando el mismo problema al hacer una llamada ajax usando jquery ajax. Lo arreglé con el siguiente código:

$.ajax({ 
    url: "/url", 
    dataType: 'text', 
    success: function(result){ alert(result); }, 
    error: ErrorMsg, 
}); 

Nota: tipoDatos: 'texto' parámetro, que trabajó para mí.