Я використав відповідь, яку дав Карсіоне, і модифікував її для використання 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');
}
}
Я додав тип даних "JSON" і змінив .responseText на responseJSON .
Я також отримав статус, використовуючи властивість statusText повернутого об'єкта. Зауважте, що це статус відповіді Аякса, а не те, чи дійсний JSON.
Бек-енд повинен повернути відповідь у правильному (добре сформованому) JSON, інакше повернутий об'єкт буде невизначений.
При відповіді на початкове запитання слід враховувати два аспекти. Один - говорить Ajax виконувати синхронно (встановивши async: false ), а інший повертає відповідь через оператор повернення викликової функції, а не у функцію зворотного виклику.
Я також спробував це з POST, і це спрацювало.
Я змінив GET на POST та додав дані: 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;
}
Зверніть увагу , що наведений вище код працює тільки в тому випадку , коли асинхронний є хибним . Якби ви встановили async: true повернутий об'єкт jqxhr не був би дійсним під час повернення виклику AJAX, лише пізніше, коли асинхронний виклик закінчився, але це набагато пізно для встановлення змінної відповіді .
beforecreate
.