2

別のページのphpファイルからオブジェクトを取得する関数を作成しようとしています。jQuery ajax関数を使用してjsonグラブを実行していますが、これは正しく機能しています。問題は、関数からそのオブジェクトを返そうとしたときです。

(success関数内から)オブジェクトを初めてログに記録するとき、コンソールでは正しいのですが、関数getGantt()から返されたオブジェクトは「未定義」としてログに記録されます。

このオブジェクトを関数から削除するにはどうすればよいですか?

私のコード:

    function getGantt(requestNumber){
        var ganttObject;
        $.ajax({
               type: "POST",
               url: "get_gantt.php",
               data: {request_number: requestNumber},
               success: function(returnValue){
                     ganttObject = $.parseJSON(returnValue);
                    console.log(ganttObject); //this logs a correct object in the console

                }
        });
        return ganttObject;
    }

    $(function(){ //document ready function

        var requestNumber = $('#request_number').text();

        var ganttObject = getGantt(requestNumber);
        console.log(ganttObject); //this logs "undefined"

    }); //end document ready function
4

3 に答える 3

7

AjaxのAは、頭字語の重要な部分です。非同期JavaScriptとXMLは非同期です。

$.ajax({success:someFunction})HTTPリクエストを作成し、レスポンスが到着したら実行することを意味しますsomeFunction

return ganttObject応答が到着するに実行されます。

内部 のデータでやりたいことは何でもする必要がありsomeFunction、呼び出し元の関数にデータを戻そうとしないでください。

于 2011-02-03T20:48:57.837 に答える
1

AJAXのAは非同期を表します。したがって、呼び出しはすぐに戻り、終了するとすぐに成功コールバックが呼び出されます。

したがって、コールバックを使用するようにコードを変更するだけです。

function getGantt(requestNumber, callback) {
    var ganttObject;
    $.ajax({
        type: "POST",
        dataType: 'json',
        url: "get_gantt.php",
        data: {request_number: requestNumber},
        success: function(returnValue){
            callback(returnValue);
        }
    });
}

$(function() {

    var requestNumber = $('#request_number').text();

    var ganttObject = getGantt(requestNumber, function(ganttObject) {
        console.log(ganttObject);
    });

});

ところで、私はこのparseJSONのものも削除しました-dataTypeをjsonに設定すると、仕事ができ、汚れが少なくなります。

于 2011-02-03T20:50:19.707 に答える
0

少なくともそれが返されない理由はわかっています。ganttObjectは同じスコープ内にある可能性がありますが、success関数は最終的にXMLHTTPオブジェクトからのreadyStateコールバックで実行されるため、getGantt関数とは異なるスレッド上にあります。$(function(){...コードを成功関数の一部にすることはできますか?

于 2011-02-03T20:49:26.653 に答える