4

私はこの方法を持っています:

function getUserName(guid) {
    var name = "Unbekannt";

    $.getJSON(urlCurrent, {
        "method" : "get_user_info",
        "guid" : guid,
        "auth_token" : temporaryAuthToken
    }, function(data) {
        if (data.status == 0) {
            alert(data.result[0].name);
            name = data.result[0].name;
        }
    });

    return name;
}

ほぼすべてが機能しています。Ajax-Request がデータを取得し、コールバック関数を起動するため、

alert(data.result[0].name);

次の値を含むポップアップが表示されます: "Forename Surname"

しかし、その後

return name;

このメソッドは「Unbekannt」を返しますが、name には新しい値「Forename Surname」が必要です。何が起こったのか、どこが間違っているのか?

ありがとう

4

3 に答える 3

4

関数から promise オブジェクトを返し、それに基づいて行動します。

function getUserName(guid) {
    return $.getJSON(urlCurrent, {
        "method" : "get_user_info",
        "guid" : guid,
        "auth_token" : temporaryAuthToken
    });
}

getUserName(guid).done(function(data) {
    if (data.status == 0) {
        alert(data.result[0].name);
    }
});

また、事前にステータス チェックを行いたい場合は、.then が適しています。

function getUserName(guid) {
    return $.getJSON(urlCurrent, {
        "method" : "get_user_info",
        "guid" : guid,
        "auth_token" : temporaryAuthToken
    }).then(function(data){
        return $.Deferred(function(def){
            if (data.status == 0) {
                return def.resolve(data);
            }
            return def.reject(data);
        });
    });
}

getUserName(guid).done(function(data) {
    alert(data.result[0].name);
});
于 2012-08-29T14:26:51.700 に答える
3

ajax 呼び出しは非同期であり、完了するまでに時間がかかるため、戻ったときnameに、getJSON コールバックから取得した新しい値がまだ割り当てられていません。

代わりにコールバック関数を用意する必要があります:

function getUserName(guid, callback) {
    var name = "Unbekannt";

    $.getJSON(urlCurrent, {
        "method" : "coinor.get_user_info",
        "guid" : guid,
        "auth_token" : temporaryAuthToken
    }, function(data) {
        if (data.status == 0) {
            alert(data.result[0].name);
            name = data.result[0].name;
            callback(name);
        }
    });
}

getUserName(guid, function(name) {
    alert(name);
});
于 2012-08-29T14:23:43.797 に答える
2

return name;ajax 呼び出しが返される前に実行されるためです。

呼び出しで返されたデータに関連させたい場合は$.getJSON()、コールバック関数内にもある必要があります。

于 2012-08-29T14:21:33.580 に答える