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