Ho usato la risposta data da Carcione e l'ho modificata per usare 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');
}
}
Ho aggiunto il tipo di dati di "JSON" e ho modificato il .responseText in responseJSON .
Ho anche recuperato lo stato utilizzando la proprietà statusText dell'oggetto restituito. Si noti che questo è lo stato della risposta Ajax, non se JSON è valido.
Il back-end deve restituire la risposta nel JSON corretto (ben formato), altrimenti l'oggetto restituito non sarà definito.
Vi sono due aspetti da considerare quando si risponde alla domanda originale. Uno sta dicendo ad Ajax di eseguire in modo sincrono (impostando async: false ) e l'altro sta restituendo la risposta tramite l'istruzione return della funzione chiamante, piuttosto che in una funzione callback.
L'ho provato anche con POST e ha funzionato.
Ho cambiato GET in POST e ho aggiunto dati: 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;
}
Si noti che il codice sopra riportato funziona solo nel caso in cui asincrono sia falso . Se dovessi impostare asincrono: vero l'oggetto restituito jqxhr non sarebbe valido al momento della restituzione della chiamata AJAX, solo in seguito al termine della chiamata asincrona, ma è troppo tardi per impostare la variabile di risposta .
beforecreate
.