在CakePHP中使用AJAX检索数据

在CakePHP中使用AJAX检索数据,cakephp,Cakephp,我正在尝试使用jQuery和CakePHP的组合检索一些数据 我有一个feed()方法,它将数据从JSON编码的数据库发回。当我使用浏览器访问URL时,该方法工作正常 function feed($id = null) { $this->layout = 'ajax'; $data = array( 'test' => true ); echo (json_encode($data)); } 我还有一个应该检索数据的方法,但由于某些原

我正在尝试使用jQuery和CakePHP的组合检索一些数据

我有一个feed()方法,它将数据从JSON编码的数据库发回。当我使用浏览器访问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();
        }
    });
}
我怀疑URL可能是错误的,因为xdebug没有接收到请求

有人对我有什么建议吗?我已经找了四个多小时了


编辑:这是页面localhost/Testing/person\u availabilities/feed的地址如果可以使用浏览器查看,则使用GET请求:

尝试:

编辑(其他信息):

不确定你是否还有问题;但是,根据您的示例,在ajax调用中似乎使用了错误的url(缺少控制器部分):

var address = '/person_availabilities/feed/1';
而不是:

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

如果您能够使用浏览器查看,则您使用的是GET请求:

尝试:

编辑(其他信息):

不确定你是否还有问题;但是,根据您的示例,在ajax调用中似乎使用了错误的url(缺少控制器部分):

var address = '/person_availabilities/feed/1';
而不是:

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

我发现您的AJAX请求存在两个问题。第一个要求理解AJAX请求本质上是异步的;因此,首字母缩略词AJAX代表异步JavaScript和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);
        }
    });
}
在上面的代码中,我首先创建了一个警报,以便您可以查看是否抛出了任何错误。其次,我添加了一个回调函数,它将在调用成功后启动,这样您就可以处理数据了

最后,您需要确保您使用的URL是正确的。您可以使用Chrome或Firebug调试器的NET选项卡来查看在AJAX请求触发时请求是否被发送到服务器。查找500个错误或404个错误,或者告诉您请求未成功的信息。如果是,请检查URL以确保它与从web浏览器地址栏发出GET请求时使用的URL相同

什么是回调函数?

这是一个作为参数传递给另一个函数的函数。然后可以调用该函数并确保它是动态的,这意味着您可以通过将不同的函数作为回调传入来更改函数的行为

就你而言:

doAJAXcall(url, function() { alert("I am a callback"); });
将导致此警报在警报发出后在成功回调中触发。JavaScript中的函数称为“一级对象”,这意味着它们可以作为参数通过引用传递给另一个函数

有关回调函数的详细信息,请参阅以下链接:


我发现您的AJAX请求存在两个问题。第一个要求理解AJAX请求本质上是异步的;因此,首字母缩略词AJAX代表异步JavaScript和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);
        }
    });
}
在上面的代码中,我首先创建了一个警报,以便您可以查看是否抛出了任何错误。其次,我添加了一个回调函数,它将在调用成功后启动,这样您就可以处理数据了

最后,您需要确保您使用的URL是正确的。您可以使用Chrome或Firebug调试器的NET选项卡来查看在AJAX请求触发时请求是否被发送到服务器。查找500个错误或404个错误,或者告诉您请求未成功的信息。如果是,请检查URL以确保它与从web浏览器地址栏发出GET请求时使用的URL相同

什么是回调函数?

这是一个作为参数传递给另一个函数的函数。然后可以调用该函数并确保它是动态的,这意味着您可以通过将不同的函数作为回调传入来更改函数的行为

就你而言:

doAJAXcall(url, function() { alert("I am a callback"); });
将导致此警报在警报发出后在成功回调中触发。JavaScript中的函数称为“一级对象”,这意味着它们可以作为参数通过引用传递给另一个函数

有关回调函数的详细信息,请参阅以下链接:


不幸的是,它不起作用。(使用我正在使用的url更新帖子)如果您只是简单地更改帖子以进入您已经存在的AJAX请求,是否有效?如果删除
数据:{}、
数据类型:“json”
,会怎么样?另外,为什么不尝试取消对错误消息的注释,以便查看是否存在问题?另外,当您通过AJAX发出请求时,调试器或网络选项卡会说什么?我使用这个url得到了一些东西,谢谢您的输入。我只需要确保它现在能够正常工作。这是传递到getJSON调用中的同一个url吗?
var address='/person\u availabilities/feed/1'不,不是。试着把“Testing”放在前面,这样你就有了
var address='/Testing/person\u availabilities/feed/1'。不幸的是,它不起作用。(使用我正在使用的url更新帖子)如果您只是简单地更改帖子以进入您已经存在的AJAX请求,是否有效?如果删除
数据:{}、
数据类型:“json”
,会怎么样?还有,为什么不试试你呢