Usé la respuesta dada por Carcione y la modifiqué para usar JSON.
function getUrlJsonSync(url){
var jqxhr = $.ajax({
type: "GET",
url: url,
dataType: 'json',
cache: false,
async: false
});
// 'async' has to be 'false' for this to work
var response = {valid: jqxhr.statusText, data: jqxhr.responseJSON};
return response;
}
function testGetUrlJsonSync()
{
var reply = getUrlJsonSync("myurl");
if (reply.valid == 'OK')
{
console.dir(reply.data);
}
else
{
alert('not valid');
}
}
He añadido el tipo de datos de 'JSON' y cambió el .responseText a responseJSON .
También recuperé el estado usando la propiedad statusText del objeto devuelto. Tenga en cuenta que este es el estado de la respuesta de Ajax, no si el JSON es válido.
El back-end tiene que devolver la respuesta en JSON correcto (bien formado), de lo contrario el objeto devuelto será indefinido.
Hay dos aspectos a considerar al responder la pregunta original. Uno le está diciendo a Ajax que funcione sincrónicamente (configurando async: false ) y el otro le devuelve la respuesta a través de la declaración return de la función de llamada, en lugar de hacerlo en una función de devolución de llamada.
También lo probé con POST y funcionó.
Cambié GET a POST y agregué datos: postdata
function postUrlJsonSync(url, postdata){
var jqxhr = $.ajax({
type: "POST",
url: url,
data: postdata,
dataType: 'json',
cache: false,
async: false
});
// 'async' has to be 'false' for this to work
var response = {valid: jqxhr.statusText, data: jqxhr.responseJSON};
return response;
}
Tenga en cuenta que el código anterior solo funciona en el caso de que async sea falso . Si estableciera async: true, el objeto devuelto jqxhr no sería válido en el momento en que regrese la llamada AJAX, solo más tarde cuando la llamada asincrónica haya finalizado, pero eso es demasiado tarde para establecer la variable de respuesta .
beforecreate
.