2012-04-22 20 views
15

Estoy usando la función $.ajax de jQuery para enviar un formulario, que funciona, pero el éxito es donde estoy teniendo mi problema. Aquí está mi código:jQuery AJAX Success

$("#form").submit(function() { 
     $.ajax({ 
      type: "POST", 
      url: '/login/spam', 
      data: formData, 
      success: function (dataCheck) { 
       if (dataCheck == 'value') { 
        //Do stuff 
       } 
      } 
     }); 
     return false; 
    }); 

El problema que estoy teniendo es la función if sigue diciendo que no es igual a DataCheck valor. Sé que sí, porque cuando elimino return false; la página muestra valor, como esperaba. Además, he usado un código casi idéntico antes, que funciona. ¿Podría alguien darme algún consejo?

+0

¿Has editado la pregunta? ¿Qué pasa con ''749afa42e6621f10bae17ee00cb1f4de''? – gdoron

+0

Para hacerlo más fácil, supongo. – neex1233

Respuesta

19

Cómo encontrar la respuesta por ti mismo:

Coloque un código de depuración para ver lo que se obtiene desde el servidor.

$("#form").submit(function() { 
     $.ajax({ 
      type: "POST", 
      url: '/login/spam', 
      data: formData, 
      success: function (dataCheck) { 
       console.log(dataCheck); // <============================== 
       if (dataCheck == 'value') { 
        //Do stuff 
       } 
      } 
     }); 
     return false; 
    }); 

Probablemente estará en otro formato de lo que piensas.

+0

Bien, intentaré esto. – neex1233

+2

return false no funcionará si hay un error en el script anterior return return false. preventDefault hace. Por lo tanto, prefiero que el resultado sea falso; http://stackoverflow.com/a/4771084/40521 – Shyju

+0

Tenga en cuenta que jQuery intentará inferir el tipo de datos del resultado (ya que no lo está especificando) en función del tipo MIME de la respuesta. Es posible que deba hacer una evaluación diferente según el tipo. –

2

Si desea evitar el comportamiento predeterminado (en este caso, el envío del formulario normal), use preventDefault sobre return false; preventDefault funcionará incluso si hay un problema en el script que está por encima de return false statement.

El siguiente código debería funcionar bien.

$("#form").submit(function(e) { 
    e.preventDefault(); 
    $.ajax({ 
     type: "POST", 
     url: '/login/spam', 
     data: formData, 
     success: function (dataCheck) { 
      if (dataCheck == 'value') { 
       //Do stuff 
      } 
     } 
    });  
}); 

Como mencionamos en gdoron, use console.debug/alert para ver qué valor hay en las variables. Usar Firebug Net tab/fiddler te ayudará a entender qué respuesta estás obteniendo de la página del servidor.

0

Es extraño. Mi consejo es que podrías usar firebug en firefox u otra cosa (por ejemplo, desarrollar herramientas en chrome) para ver la respuesta xhr.

Y creo que tal vez el resultado incorrecto se deba a una respuesta incorrecta de tipo xhr (por ejemplo, el sobre '749afa42e6621f10bae17ee00cb1f4de' con etiqueta html) o algún espacio no recortado.

mayo que le ayudan :)

0

Sé que puede ser tarde sin embargo yo estaba teniendo este mismo problema hoy y el problema era que la cadena correcta fue devuelto al éxito, sin embargo, por alguna razón que tenía un salto de línea extra personaje en frente de ella. Localmente, esto no ocurrió, sin embargo, cuando lo puse en línea, siempre se agregó una nueva línea a la cadena que se devuelve (en su caso, DataCheck). Usé la función substr() para deshacerme de la nueva línea al final y funcionó bien a partir de ahí.

+1

Esto parece una adivinanza y no proporciona hechos que podrían conducir a una solución lógica al problema –

0

si (response.indexOf ("éxito") = - 1) {} Pruebe este método indexOf()

0

supongo que dataCheck es una cadena .A continuación, utilice localeCompare()

if (dataCheck.localeCompare('value') == 0) { 
    //Do stuff 
} 
  • devoluciones -1 si cadena1 se ordena antes str2
  • devoluciones si las dos cadenas son iguales
  • devoluciones si str1 está ordenada según str2
+0

gracias por el formato del texto –