Ich habe die Antwort von Carcione verwendet und sie so geändert, dass sie JSON verwendet.
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');
}
}
Ich habe den Datentyp von 'JSON' hinzugefügt und den .responseText in responseJSON geändert .
Ich habe den Status auch mithilfe der statusText- Eigenschaft des zurückgegebenen Objekts abgerufen . Beachten Sie, dass dies der Status der Ajax-Antwort ist und nicht, ob der JSON gültig ist.
Das Back-End muss die Antwort in korrektem (wohlgeformtem) JSON zurückgeben, andernfalls ist das zurückgegebene Objekt undefiniert.
Bei der Beantwortung der ursprünglichen Frage sind zwei Aspekte zu berücksichtigen. Einer weist Ajax an, synchron zu arbeiten (indem async: false festgelegt wird ), und der andere gibt die Antwort über die return-Anweisung der aufrufenden Funktion zurück und nicht in eine Rückruffunktion.
Ich habe es auch mit POST versucht und es hat funktioniert.
Ich habe das GET in POST geändert und hinzugefügt Daten : 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;
}
Beachten Sie, dass der obige Code funktioniert nur in dem Fall , in dem Asynchron ist falsch . Wenn Sie async: true festlegen würden, wäre das zurückgegebene Objekt jqxhr zum Zeitpunkt der Rückkehr des AJAX-Aufrufs nicht gültig, erst später, wenn der asynchrone Aufruf beendet ist. Dies ist jedoch viel zu spät, um die Antwortvariable festzulegen.
beforecreate
.