2

jQuery と CakePHP の組み合わせを使用してデータを取得しようとしています。

JSON エンコードされたデータベースからデータを送り返す feed() メソッドがあります。ブラウザを使用して URL にアクセスすると、メソッドは正常に機能します。

function feed($id = null) {
    $this->layout = 'ajax';
    $data = array(
        'test' => true
    );
    echo (json_encode($data));
}

データを取得する必要があるメソッドもありますが、何らかの理由でそうではありません。

var address = '/person_availabilities/feed/1';

// JavaScript Document

$(document).ready(function() {
    var events = doAJAXcall(address);
    alert(events)
}


function doAJAXcall(url) {
    $.ajax({
        type : 'POST',
        url : url,
        dataType : 'json',
        data: {
        },
        success : function(data){
            return data;
        },
        error : function(XMLHttpRequest, textStatus, errorThrown) {
            //$('#login_error').show();
        }
    });
}

xdebug がリクエストを取得しないため、URL が間違っている可能性があると思われます。

誰か私に提案はありますか?もう4時間以上探しています。

編集: これはページ localhost/Testing/person_availabilities/feed のアドレスです

4

2 に答える 2

3

ブラウザを使用して表示できる場合は、GETリクエストを使用しています。

試す:

$.getJSON(url, function(data){
   alert(data);
});

編集(追加情報):

まだ問題が発生しているかどうかはわかりません。しかし、あなたの例では、ajax呼び出しで間違ったURLを使用していたようです(コントローラー部分がありません):

var address = '/person_availabilities/feed/1';

それ以外の:

var address = '/Testing/person_availabilities/feed/1';
于 2012-05-06T17:36:40.727 に答える
1

あなたの AJAX リクエストには 2 つの問題があります。1 つ目は、AJAX リクエストが本質的に非同期であることを理解する必要があります。したがって、AJAX という頭字語は Asynchronous JavaScript and XML を表します。非同期コンポーネントは、理解しなければならない重要なことです。

サーバーに AJAX リクエストを送信する関数がありますが、成功のコールバック関数で値を返そうとしています。成功コールバックが発生するずっと前に関数が実際に戻るため、これを行うことはできません。

function doAJAXcall(url, callback) {
    $.ajax({
        type : 'GET',
        url : url,
        success : function(data){
            // return data; // you cannot return data here
            alert(data);  // should print [ Object ]
            try {
                alert(JSON.stringify(data));  // should print JSON, assuming you're getting JSON
            } catch(e) {
                alert("Error trying to parse JSON. Is your server returning JSON? " + e.message);
            }
            if(callback) callback(data);  // fire a callback function to process the data            
        },
        error : function(XMLHttpRequest, textStatus, errorThrown) {
            //$('#login_error').show();
            alert("error :: " + textStatus + " : " + errorThrown);
        }
    });
}

上記のコードでは、エラーがスローされたかどうかを確認できるように、最初にアラートを作成しました。次に、データを処理できるように、success が呼び出された後に起動するコールバック関数を追加しました。

最後に、使用している URL が正しいことを確認する必要があります。Chrome または Firebug デバッガーの [NET] タブを使用して、AJAX 要求が発生したときに要求がサーバーに送信されているかどうかを確認できます。500 エラーや 404 エラー、またはリクエストが失敗したことを示す何かを探します。その場合は、URL をチェックして、Web ブラウザーのアドレス バーから GET 要求を行うときに使用しているものと同じであることを確認してください。

コールバック関数とは何ですか?

これは、パラメーターとして別の関数に渡す関数です。次に、その関数を呼び出して動的であることを確認できます。つまり、さまざまな関数をコールバックとして渡すだけで、関数の動作を変更できます。

あなたの場合:

doAJAXcall(url, function() { alert("I am a callback"); });

このアラートは、アラートの後に成功のコールバックで発生します。JavaScript の関数は「第一級オブジェクト」として知られています。つまり、参照によって別の関数へのパラメーターとして渡すことができます。

コールバック関数の詳細については、次のリンクを参照してください。

https://stackoverflow.com/a/3616266/552792

于 2012-05-06T18:00:55.623 に答える