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 die dataType de JSON'. und änderte die .responseText a responseJSON .
Ich habe den Status auch mit der Funktion statusText Eigenschaft des zurückgegebenen Objekts. Beachten Sie, dass es sich hierbei um den Status der Ajax-Antwort handelt, nicht darum, ob das 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. Der eine ist die Anweisung an Ajax, synchron zu arbeiten (durch Setzen von asynchron: falsch ) und die andere ist die Rückgabe der Antwort über die Return-Anweisung der aufrufenden Funktion, anstatt in eine Callback-Funktion.
Ich habe es auch mit POST versucht und es hat funktioniert.
Ich habe GET in POST geändert und Folgendes 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 nur in dem Fall funktioniert, wenn asynchron es falsch . Wenn Sie Folgendes einstellen würden asynchron: wahr das zurückgegebene Objekt jqxhr wäre zum Zeitpunkt der Rückkehr des AJAX-Aufrufs nicht gültig, sondern erst später, wenn der asynchrone Aufruf beendet ist, aber das ist viel zu spät, um die Antwort variabel.
36 Stimmen
Der richtige Weg, um das zu lösen wäre, um Ihre Widget-Erweiterung Punkt Verwendung Versprechen neu zu schreiben. Auf diese Weise können Sie leicht eine asynchrone Aktion (wie eine Ajax-Anfrage) als
beforecreate
.3 Stimmen
Ich schlage die Sajak-Funktion vor. Haben wir einen Buchstaben T? Ja, Vanna, gib mir 3 T's.
2 Stimmen
@Kos ist genau richtig. Sync XHR ist hier nicht erforderlich
4 Stimmen
Wenn Leute mich nach einem Rat fragen, wenn sie mit Javascript anfangen, sage ich: Akzeptieren Sie den asynchronen Charakter von Javascript, versuchen Sie nicht, dagegen anzukämpfen.
1 Stimmen
Sie können versuchen, mit embeddedjs.com
6 Stimmen
Diese Frage ist vergleichbar mit der Frage "Wie speichere ich meine Benutzerpasswörter im Klartext?" Sicher gibt es eine Antwort, aber tun Sie es nicht.
0 Stimmen
Diese Kommentare sind wie "Ich weiß, was du gefragt hast, aber da mir die Art und Weise, wie du es tust, nicht gefällt, werde ich keine sinnvolle Antwort geben und dir nur sagen, dass du deine Lebensentscheidungen überdenken solltest". Manchmal sind synchrone Gespräche notwendig.