使用CakePHP中的AJAX检索数据

时间:2012-05-06 17:32:05

标签: cakephp

我正在尝试使用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();
        }
    });
}

我怀疑网址可能有误,因为xdebug没有选择请求。

有人对我有什么建议吗?我一直在寻找超过四个小时。

编辑:这是页面localhost / Testing / person_availabilities / feed

的地址

2 个答案:

答案 0 :(得分:3)

如果您能够使用浏览器查看它,则表示您正在使用GET请求:

尝试:

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

编辑(附加信息):

不确定你是否还有问题;但听起来你在你的ajax调用中使用了错误的url(缺少Controller部分):

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

而不是:

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

答案 1 :(得分: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);
        }
    });
}

在上面的代码中,我首先创建了一个警报,以便您可以查看是否有任何错误被抛出。其次,我添加了一个回调函数,该函数将在调用成功后触发,以便您可以处理数据。

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

什么是回调函数?

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

在你的情况下:

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

在警报之后,会在您的成功回调中触发此警报。 JavaScript中的函数称为“第一类对象”,这意味着它们可以通过引用作为参数传递给另一个函数!

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

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