J'ai utilisé la réponse donnée par Carcione et l'ai modifiée pour utiliser 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');
}
}
J'ai ajouté le dataType de 'JSON' et changé le .responseText en responseJSON .
J'ai également récupéré le statut en utilisant la propriété statusText de l'objet retourné. Notez qu'il s'agit de l'état de la réponse Ajax, et non de la validité du JSON.
Le back-end doit retourner la réponse dans un JSON correct (bien formé), sinon l'objet retourné ne sera pas défini.
Il y a deux aspects à considérer lors de la réponse à la question d'origine. L'une dit à Ajax de fonctionner de manière synchrone (en définissant async: false ) et l'autre renvoie la réponse via l'instruction return de la fonction appelante, plutôt que dans une fonction de rappel.
Je l'ai également essayé avec POST et cela a fonctionné.
J'ai changé le GET en POST et ajouté des données: 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;
}
Notez que le code ci-dessus ne fonctionne que dans le cas où async est faux . Si vous deviez définir async: true, l'objet renvoyé jqxhr ne serait pas valide au moment du retour de l'appel AJAX, uniquement plus tard lorsque l'appel asynchrone est terminé, mais il est beaucoup trop tard pour définir la variable de réponse .
beforecreate
.