2

data_response外側を使用する方法はあり$.post()ますか?

これは私が使用するコードの一部です:

$.post('do.php', { OP: "news_search", category: cat_id },
    function(data_response){
        var response = data_response; //I need to access this variable outside of $.post()
    }
}, "json");

console.log(response); //response is not defined, is what I get for now

アップデート

その応答をグローバルに利用できるようにする方法はありませんか?

4

5 に答える 5

2

いいえ; $.postは非同期で実行されるため、を呼び出すconsole.logと、AJAXリクエストはまだ実行されており、まだ応答がありません。これがコールバック関数の目的です。リクエストの完了に実行されるコードを提供することです。コールバック関数に移動console.logすると、機能するはずです。

$.post('do.php', { OP: "news_search", category: cat_id },
    function(data_response){
        var response = data_response; //I need to access this variable outside of $.post()
        console.log(response);
    }
}, "json");

更新:応答データをグローバルに利用できるようにする場合は、次のようにグローバルスコープで変数を宣言できます。

var response = null;
$.post('do.php', { OP: "news_search", category: cat_id },
    function(data_response){
        response = data_response;
        console.log(response);
    }
}, "json");

responseもちろん、実際に値が入力されている ことを確認できる唯一のコンテキストは$.post、行の後に提供されるコールバック関数にありますresponse = data_response;。スクリプトの他の段階で使用する場合は、最初にその値を確認する必要があります。このようなもの:

if (response !== null)
{
    console.log(response);
}

$.post呼び出しの直後にこのコードを配置すると、このコードは何も実行されないことに注意してください。これは、POSTリクエストが終了した後、他の非同期コールバック(おそらく、ある種のUIインタラクションイベント)で実行された場合にのみ役立ちます。

于 2012-05-18T13:03:59.037 に答える
1

コールバックの外部で変数を宣言するだけで、そこからアクセスできるコードの一部にスコープが設定されます。

var response;

$.post('do.php', { OP: "news_search", category: cat_id },
    function(data_response){
    response = data_response; 
    }
}, "json");

console.log(response); //response is now defined - It won't be populated yet though.

上記のコードで指摘されているように、応答は定義されますが、console.logを呼び出すまでには入力されませんが、コールバックが発生した後のある時点で変数にアクセスすると、入力されます。

このルートをたどる場合は、モジュールパターンまたはクロージャーを使用して、応答変数がグローバルスコープに入らないようにする必要があります(とにかく公平にこれを実行する必要があります)

Crockfordのモジュールパターン:http ://www.yuiblog.com/blog/2007/06/12/module-pattern/

于 2012-05-18T13:04:20.167 に答える
1

aa変数を使用して、スクリプト内の任意の場所でdone()を確認できます。実行された場合はすぐに実行され、実行されなかった場合はajax呼び出しが完了すると実行されます。

var XHR = $.post('do.php', { OP: "news_search", category: cat_id },
    function(data_response){
        // do somehing with data_response
    }
}, "json");


function doSomethingElse() {
    XHR.done(function(response) {
        console.log(response);
    });
}
于 2012-05-18T13:09:28.253 に答える
0

$ .post()の外部で応答を使用する必要があり、$。post()呼び出しの直後にこの値が入力されていることを確認する必要がある場合は、同期的に「POST」呼び出しを試みることができます。これは$.post()を使用して作成することはできませんが、$。ajax()を使用して作成することはできます。

var returnedData = null;

$.ajax({
  type: 'POST',
  url: 'do.php', 
  data: { OP: "news_search", category: cat_id },
  success: function (response) {
            returnedData = response;
        },
  dataType: "text"
});

console.log(returnedData );
于 2012-05-18T13:14:27.970 に答える
0

私はそれを次のように機能させました:

var returnedData = {}; //Declaring Object var not just var
$.ajax({
type: 'POST',
url: 'do.php',
data: { OP: "news_search", category: cat_id },
success: function (response) {
returnedData.result1=response;  //Add response into the Object created outside the ajax
},
dataType: "json"
});
console.log(returnedData);//inside it you can get returnedData.result1
于 2016-11-29T04:54:07.700 に答える