2011-04-28 25 views
140

He estado buscando en Google esto y evitando este error en mi lista de arreglos de errores desde hace mucho tiempo, pero finalmente he llegado al final de la lista, el último de lo cual tengo que hacer que una función devuelva verdadero/falso para indicar si la validación ha tenido éxito o no.

Estoy usando ajax para comparar ciertos campos con los que ya están en la base de datos y de manera predeterminada el método $.post() realiza sus operaciones de forma asincrónica.

Estoy estableciendo una variable dentro de la llamada onSuccess y el método de llamada no obtiene una respuesta debido a esto, así que todos mis js/jquery fallan en pageLoad ... Preferiría si pudiera seguir usando el $.post método.

+0

Ah, necesitará añadir un código de ejemplo para aclarar este caso. – Femi

+3

No haga esto. Congelará el navegador hasta que el servidor responda. – SLaks

+0

@Neal, la razón por la cual esta pregunta es única es porque jQuery tiene varias formas de llamar a una página de servidor y específicamente quería saber cómo hacer una solicitud $ .post sincrónica, no solo una solicitud jQuery ajax – pythonian29033

Respuesta

183

jQuery < 1,8

puedo sugerir que se utiliza en lugar de $.ajax()$.post() ya que es mucho más personalizable.

Si llama $.post(), por ejemplo, así:

$.post(url, data, success, dataType); 

Se podría convertirla en su $.ajax() equivalente:

$.ajax({ 
    type: 'POST', 
    url: url, 
    data: data, 
    success: success, 
    dataType: dataType, 
    async:false 
}); 

Tenga en cuenta la async:false al final del objeto $.ajax() parámetro .

Aquí tienes un detalle completo de los parámetros $.ajax(): jQuery.ajax() – jQuery API Documentation.


jQuery> = 1.8 "asíncrono: true" aviso de desaprobación

jQuery> = 1.8 no bloqueará la interfaz de usuario en la petición HTTP, por lo que tenemos que utilizar una solución para detener la interacción del usuario siempre que la solicitud sea procesada. Por ejemplo:

  • utilice un complemento, p. BlockUI;
  • agregue manualmente una superposición antes de llamar al $.ajax(), y luego elimínela cuando se llame al AJAX .done().

Por favor, eche un vistazo a this answer para un ejemplo.

+0

hmm ... pero aún será asincrónico? – ken

16

Si desea una solicitud sincrónica configure la propiedad async en false para la solicitud. Echa un vistazo a la jQuery AJAX Doc

6

De los documentos de Jquery: especifique que la opción asincrónica es falsa para obtener una solicitud síncrona de Ajax. Luego, su devolución de llamada puede establecer algunos datos antes de que la función madre continúe.

Esto es lo que el código se vería como si cambiado como se sugiere:

beforecreate: function(node,targetNode,type,to) { 
    jQuery.ajax({ 
     url: url, 
     success: function(result) { 
         if(result.isOk == false) 
          alert(result.message); 
        }, 
     async: false 
    });   
} 

esto se debe a $.Ajax es el único tipo de solicitud que se puede establecer la asynchronousity para

+1

Esta respuesta parece ser una copia de [esta] (http://stackoverflow.com/a/133327/3714134) respuesta. –

+0

@HugoZink Definitivamente fue copiada, pero ambos de nuestras respuestas fueron copiados de la documentación de jQuery: -D – pythonian29033

Cuestiones relacionadas