Siéntete en la libertad de compartir nuestro sitio y códigos con tus amigos, ayúdanos a ampliar nuestra comunidad.
Solución:
El problema es que no puede devolver un valor de una llamada asincrónica, como una solicitud AJAX, y esperar que funcione.
El motivo es que el código que espera la respuesta ya se ha ejecutado en el momento en que se recibe la respuesta.
La solución a este problema es ejecutar el código necesario en el interior los success:
llamar de vuelta. De esa manera está accediendo a la data
sólo cuando está disponible.
function isSession(selector)
$.ajax(
type: "POST",
url: '/order.html',
data: ( issession : 1, selector: selector ),
dataType: "html",
success: function(data)
// Run the code here that needs
// to access the data returned
return data;
,
error: function()
alert('Error occured');
);
Otra posibilidad (que es efectivamente lo mismo) es llamar a una función dentro de su success:
devolución de llamada que pasa los datos cuando están disponibles.
function isSession(selector)
$.ajax(
type: "POST",
url: '/order.html',
data: ( issession : 1, selector: selector ),
dataType: "html",
success: function(data)
// Call this function on success
someFunction( data );
return data;
,
error: function()
alert('Error occured');
);
function someFunction( data )
// Do something with your data
Hay muchas formas de obtener la respuesta de jQuery AJAX. Estoy compartiendo con ustedes dos enfoques comunes:
Primero:
utilizar asíncrono=false y dentro de la función devuelve ajax-object y luego obtiene la respuesta ajax-object.responseText
/**
* jQuery ajax method with async = false, to return response
* @param mix selector - your selector
* @return mix - your ajax response/error
*/
function isSession(selector)
return $.ajax(
type: "POST",
url: '/order.html',
data:
issession: 1,
selector: selector
,
dataType: "html",
async: !1,
error: function()
alert("Error occured")
);
// global param
var selector = !0;
// get return ajax object
var ajaxObj = isSession(selector);
// store ajax response in var
var ajaxResponse = ajaxObj.responseText;
// check ajax response
console.log(ajaxResponse);
// your ajax callback function for success
ajaxObj.success(function(response)
alert(response);
);
Segundo:
utilizar $.extender
método y hacer una nueva función como ajax
/**
* xResponse function
*
* xResponse method is made to return jQuery ajax response
*
* @param string url [your url or file]
* @param object your ajax param
* @return mix [ajax response]
*/
$.extend(
xResponse: function(url, data)
// local var
var theResponse = null;
// jQuery ajax
$.ajax(
url: url,
type: 'POST',
data: data,
dataType: "html",
async: false,
success: function(respText)
theResponse = respText;
);
// Return the response text
return theResponse;
);
// set ajax response in var
var xData = $.xResponse('temp.html', issession: 1,selector: true);
// see response in console
console.log(xData);
puedes hacerlo tan grande como quieras…
Vi las respuestas aquí y, aunque útiles, no eran exactamente lo que quería, ya que tuve que modificar gran parte de mi código.
Lo que funcionó para mí, fue hacer algo como esto:
function isSession(selector)
//line added for the var that will have the result
var result = false;
$.ajax(
type: "POST",
url: '/order.html',
data: ( issession : 1, selector: selector ),
dataType: "html",
//line added to get ajax response in sync
async: false,
success: function(data)
//line added to save ajax response in var result
result = data;
,
error: function()
alert('Error occured');
);
//line added to return ajax response
return result;
la esperanza ayuda a alguien
Anakin
Sección de Reseñas y Valoraciones
Finalizando este artículo puedes encontrar las interpretaciones de otros creadores, tú además tienes la opción de dejar el tuyo si dominas el tema.