0

関数が取得したデータを別の関数に返そうとしていますが、うまくいかないようです。データを返すようにするにはどうすればよいですか?

function playerid(playername) {
    $.ajax({
        type: "POST",
        url: "fn.php?playerid",
        data: "playername="+playername,
        success: function(data) {
            //$("#test").text(data);
            return data;
        }
    });
}

このような別の機能で使用したい

showBids(playerid(ui.item.value));




function showBids(playerid) {
    $.ajax({
        type: "POST",
        url: "poll.php?",
        async: true,
        dataType: 'json',
        timeout: 50000,
        data: "playerid="+playerid,
        success: function(data) {

            //.each(data, function(k ,v) {

            //})
            //$("#current_high").append(data);

            setTimeout("getData()", 1000);
        }
    });
4

2 に答える 2

3

まず第一に、あなたplayerid()は何も返さないので、何を使いたいですか? callのみ$.ajax()があり、return ステートメントはありません (コールバックの 1 つに$.ajax()return ステートメントがありますが、以下を参照してください)。

第 2 に、JavaScript はいくつかのことを非同期で行います。そうしないと、サーバーから AJAX 呼び出しが返されるまで、すべてのインターフェイス要素がユーザーの操作に反応するのを待つ必要があります。

いくつかの関数にコールバックを渡すことにより、イベントベースのアプローチを使用します。次に、それらが終了したら、コールバックを呼び出して結果を渡します。

function getplayerid(playername, callback) {
    $.ajax({
        type: "POST",
        url: "fn.php?playerid",
        data: "playername="+playername,
        success: function(data) {
            //$("#test").text(data);
            callback(data);
        }
    });
}

そして、そのように使用します:

getplayerid(ui.item.value, showBids);

(実際にはプレイヤーIDを返さないため、関数名の変更に注意してください。それを取得してコールバックに渡します)

于 2012-06-16T19:32:23.123 に答える
1

同期 Ajax の使用を試みることができます。

function playerid(playername) {
    return $.ajax({
        type: "POST",
        url: "fn.php?playerid",
        data: "playername="+playername,
        async : false   //making Ajax syncronous
    }).responseText;
}

showBidsそれ以外の場合は、コールバックとして関数を使用する必要があります:

function playerid(playername, callback) { 
     $.ajax({
        type: "POST",
        url: "fn.php?playerid",
        data: "playername="+playername,
        success: function(data) {
           callback(data);
        }
     });
} 
//Usage
playerid(ui.item.value,showBids);
于 2012-06-16T19:32:05.580 に答える