0

jsonServerResponse 関数から返された値を警告すると、JSON が process.php ページから返されているにもかかわらず、その値は未定義です。

function jsonServerResponse(operation, JSOoptionalData) {
        JSOoptionalData = (typeof JSOoptionalData == "undefined") ? 'defaultValue' : JSOoptionalData
        var jqxhr = $.ajax({
            type: "POST",
            url: "process.php",
            data: "apicommand=" + JSOoptionalData,
            success: function (json) {
                return jQuery.parseJSON(json);
            }
        });
}

alert("Response as JS Object: "+jsonServerResponse("operation"));

問題は、非同期リクエストが完了する前にアラート関数が作成されたことにあることはわかっていますが、この問題を解決する方法がわかりません。どんなアドバイスも本当に感謝しています:)

4

3 に答える 3

5

これは、AJAX リクエストが非同期であるためreturnです。呼び出しが完了する前に がヒットし、関数は常に null を返します。

successコールバック自体の中から、AJAX 呼び出しに依存するコードを呼び出す必要があります。これを試して:

function jsonServerResponse(operation, JSOoptionalData) {
    JSOoptionalData = (typeof JSOoptionalData == "undefined") ? 'defaultValue' : JSOoptionalData
    var jqxhr = $.ajax({
        type: "POST",
        url: "process.php",
        data: "apicommand=" + JSOoptionalData,
        success: function (json) {
            alert("Response as JS Object: " + json);

            // to see more information about the object returned, use console.log:
            console.log(json);
        }
    });
}

jsonServerResponse("operation")
于 2012-05-29T08:29:19.060 に答える
1

わかりました、私は別の投稿からそれを理解しました。結果は、成功のコールバック内で処理するか、それ自体がコールバック関数である引数を追加して、ajax リクエストの結果をコールバックに適用できます。

function jsonServerResponse(operation, callback, JSOoptionalData) {
        JSOoptionalData = (typeof JSOoptionalData == "undefined") ? 'defaultValue' : JSOoptionalData
        jqxhr = $.ajax({
            type: "POST",
            contentType: "application/json",
            url: "process.php",
            data: "apicommand=" + operation + "&optionaldata" + JSON.stringify(JSOoptionalData),
            dataType: "json",
            success: function (json) {
                if(typeof callback === 'function') callback.apply(this, [json]);
            }
        });
}


jsonServerResponse("get_something_from_server", function(returnedJSO){
     console.log(returnedJSO.Result.Some_data);
}, "optional_data");

そしてgdoron、あなたが尋ねた行は3番目の引数をオプションにします。サーバーにデータを渡す場合 (変数の数がわからない場合) は、オプションの引数を追加して js オブジェクトを渡し、これを JSON 文字列に変換し、それをデコードすることをお勧めします。側。

平和!:)

于 2012-05-29T09:21:50.873 に答える
1

問題を解決しました。ajax は非同期操作です。返されたデータは、成功のコールバックでのみ使用できます。

function jsonServerResponse(operation, JSOoptionalData) {
    // What that line suppose to do???
        JSOoptionalData = (typeof JSOoptionalData == "undefined") ? 'defaultValue' : JSOoptionalData
        var jqxhr = $.ajax({
            type: "POST",
            url: "process.php",
            data: "apicommand=" + JSOoptionalData,
            dataType: "json", // Change the dataType to json.
            success: function (json) {
                console.log("Response as JS Object:") 
                console.log(json);
            }
        });
}
于 2012-05-29T08:28:10.120 に答える