2

PHPからJSONをフェッチするJavaScript関数があります。JSONを取得したら、それを解析して配列にロードし、その配列を返して、どこでもデータを使用できるようにすることを計画しています。

これはajax関数です:

function get_ajax(route_val){

$.ajax({
            url: "ajax.php",
            dataType: 'json',
            data: { 
                route: route_val
        },
            success: function(result) {
                if(result.error == true){
                    alert(result.message);
                }else{

                    $.each(result, function(key1, value1){

                        //console.log(key1 + ":" + value1);

                        returnarray[key1] = value1;

                    });             

                    return returnarray;
                }

            }
        });


}
</script>

次に、say var arr = get_ajax( '1')を定義しようとすると、arrは空になります。関数内から配列からアラートとconsole.logを取得できますが、それを返すと何も返されません。

関数の外には存在しないようです。

何か案は?

4

3 に答える 3

6

Ajax間違って使用している場合、アイデアはreturn何も持たないことですが、代わりにデータcallbackを処理する関数と呼ばれるものにデータを渡します。

IE:

function handleData( responseData ) {
    // do what you want with the data
    console.log(responseData);
}

$.ajax({
    url: "hi.php",
    ...
    success: function ( data, status, XHR ) {
        handleData(data);
    }
});

return送信ハンドラーで何かを実行しても何も実行されません。代わりに、データを渡すか、成功関数内で直接データを使用して必要な処理を実行する必要があります。

于 2012-07-31T04:05:12.683 に答える
3

問題は、成功関数が配列をどこにも返さないことです。実行する必要があるのは、成功ハンドラー内でデータを完全に処理するか、別のメソッド/関数を呼び出して必要な処理を実行することです。

仮に、次のようになります。

success: function(result) {
    if(result.error == true){
        alert(result.message);
    }else{
        $.each(result, function(key1, value1){
            returnarray[key1] = value1;
        });
        //Something like this  
        ajaxHandlers.handleReturnedArray(returnarray);
    }
}
于 2012-07-31T04:05:57.790 に答える
0

どうしても何かを返してもらいたい場合は、同期リクエストを実行できます(AJAX(非同期JavaScriptおよびXML)のポイントではありませんが)。

function get_ajax(route_val){

    var returnarray = [];

    $.ajax({
        url: "ajax.php",
        dataType: 'json',
        async: false,
        data: { 
            route: route_val
    },
        success: function(result) {
            if(result.error == true){
                alert(result.message);
            }else{

                $.each(result, function(key1, value1){
                    returnarray[key1] = value1;

                });             

            }
        }
    });

    return returnarray;
}
于 2012-07-31T05:13:18.740 に答える