0

重複の可能性:
AJAX 応答テキストを返すには?
関数からのAJAX呼び出しからの応答を返す方法は?

そのため、ユーザーがオンラインかオフラインかを確認するために AJAX 呼び出しを行う JavaScript 関数があります。こんな感じです。

function onlineStatus(){

    $.ajax({
        url: "assets/ajax/online-offline.php",
        cache: false,
        success: function(html){
          return html;
        }
    }); 
}

この関数の値を、後で使用できる変数として割り当てたいと思います。

このようなもの。

var test = onlineStatus();

if (test == "true")
   alert("online");
else
   alert("offline");

これは可能ですか?私は何か間違ったことをしているに違いありませんが、この結果を達成する方法がわかりません。ありがとう

// 編集: ご協力いただきありがとうございます。申し訳ありませんが、質問が重複していた可能性があることに気づきませんでした。最初は何を検索すればよいかわからなかったので、関連するものは何も表示されませんでした。

4

7 に答える 7

6

$.ajaxは非同期であるため、から何も返すことができませんonlineStatus。ajax 呼び出しが完了したときに呼び出すことができるコールバック関数を渡す必要があります。

function onlineStatus(callback){

    $.ajax({
        url: "assets/ajax/online-offline.php",
        cache: false,
        success: callback
    }); 
}

onlineStatus(function(test) {
    if (test == "true")
       alert("online");
    else
       alert("offline");
});
于 2013-01-11T17:38:23.610 に答える
4

呼び出しは非同期で行われるため、コールバック関数を に渡す必要がありますonlineStatus。何かのようなもの:

function onlineStatus(callback){

    $.ajax({
        url: "assets/ajax/online-offline.php",
        cache: false,
        success: function(html){
          callback(html);
        }
    }); 
}

そして、次のように呼び出します。

onlineStatus(function (html)
   {
      // Do stuff with the status
   });
于 2013-01-11T17:38:34.193 に答える
1

AJAX は非同期です。それが A の略です。コールバックを渡す必要があります。

例えば:

function onlineStatus(callback){

    $.ajax({
        url: "assets/ajax/online-offline.php",
        cache: false,
        success: callback
    }); 
}

onlineStatus(function(data) { 
    if (data == "true") { 
        alert "online"; 
    }
    else {
        alert "offline";
    }
}
于 2013-01-11T17:37:48.863 に答える
1

遅延オブジェクトを簡単に使用できます。

function onlineStatus(){

    var request = $.ajax({
        url: "assets/ajax/online-offline.php",
        cache: false
    }); 

    return request;
}



var test = onlineStatus();
test.done(function(html) {
    if (html)
       alert("online");
    else
       alert("offline");
});

$.ajaxを返すjqXHRので、次を使用できます.done

jqXHR.done(function(data, textStatus, jqXHR) {});

An alternative construct to the success callback option, the .done() method replaces the deprecated

于 2013-01-11T17:48:01.027 に答える
0

jQuery ajax 呼び出しは非同期呼び出しです。アラートを表示するために結果を使用するには、結果が得られるまで待つ必要があります。

    var isOnline = false;
    checkOnlineStatus();

    function checkOnlineStatus(){

        $.ajax({
            url: "assets/ajax/online-offline.php",
            cache: false,
            success: callback
            }
        }); 

    }
    function callback(html){
        isOnline = (html == "online");
        showAlert();
    }
    function showAlert(){
        if (isOnline == "true")
           alert("online");
        else
           alert("offline");
    }
于 2013-01-11T17:47:48.267 に答える
0

メソッドは非同期であるため、$.ajaxコールバックで戻り値を処理する必要があります。

function onlineStatus(){

    $.ajax({
        url: "assets/ajax/online-offline.php",
        cache: false,
        success: function(html){
            if (html == "true")
                alert("online");
            else
                alert("offline");
        }
    }); 
}
于 2013-01-11T17:38:39.490 に答える
0

あなたはこのようにすることができます........しかし、ajaxによる同期リクエストはコードを遅くするので、それは良い方法ではありません....

function onlineStatus(){
var data;
    $.ajax({
        url: "assets/ajax/online-offline.php",
        cache: false,
        async:false,
        success: function(html){
           data = html;
        }
    }); 

return data;
}

または
、アラートボックスのみを表示したい場合...

function onlineStatus(){

    $.ajax({
        url: "assets/ajax/online-offline.php",
        cache: false,
        success: function(html){
           if (html== "true")
            alert("online");
            else
            alert("offline");
        }
    }); 

return data;
}
于 2013-01-11T17:39:30.757 に答える