2

我正在尝试使用 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_availabilities/feed 的地址

4

2 回答 2

3

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

尝试:

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

编辑(附加信息):

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

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

代替:

var address = '/Testing/person_availabilities/feed/1';
于 2012-05-06T17:36:40.727 回答
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 中的函数被称为“一等对象”,这意味着它们可以通过引用作为参数传递给另一个函数!

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

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

于 2012-05-06T18:00:55.623 回答