Carcioneからの回答を使用し、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');
}
}
私は、追加のdataTypeの「JSON」を、変更.responseTextをするresponseJSON。
また、返されたオブジェクトのstatusTextプロパティを使用してステータスを取得しました。これはAjax応答のステータスであり、JSONが有効かどうかではないことに注意してください。
バックエンドは正しい(整形式)JSONで応答を返す必要があります。そうしないと、返されるオブジェクトは未定義になります。
元の質問に答える際に考慮すべき2つの側面があります。1つは(async:falseを設定することにより)同期的に実行するようにAjaxに指示することであり、もう1つはコールバック関数ではなく、呼び出し関数のreturnステートメントを介して応答を返すことです。
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がfalseの場合にのみ機能することに注意してください。async:trueを設定した場合、返されたオブジェクトjqxhrは、AJAX呼び出しが戻った時点では有効ではなく、非同期呼び出しが終了した後でのみ有効ですが、応答変数を設定するには遅すぎます。
beforecreate
。