返回数组对象然后将其显示给用户时出现问题,请查看演示代码。一个基本的片段,但它有相同的想法,我只是不能在这里发布很长的代码。
Class foobar{
public function foo()
{
return array( 'bar' => 'value' );
}
}
这个php代码被另一个类
使用Class foobar_fetcher{
public function getFoo()
{
$fb = new foobar();
$result = $fb->foo();
return $result;
}
}
foobar_fetcher再次由主执行文件(ajaxdispatcher.php)调用 - 带有json标头。
if( isset( $_POST['fetch'] ) ){
$httpresponse = new stdClass();
$fb_fetch = new foobar_fetcher();
$httpresponse->data = $fb_fetch->getFoo();
}
echo json_encode( $httpresponse );
最后,这个ajaxdispatcher被一个jquery ajax调用。
$.ajax({
url: 'ajaxdispatcher.php',
type: 'post',
data: {fetch:'fetch'},
success: function( data ){
if( data ) console.log( data );
}
});
现在,当我尝试打印数据时,它没有来自服务器的响应。 但是当我将foobar Class下的foo()的返回值更改为整数或字符串时。事情会好起来的。
答案 0 :(得分:2)
您应该尝试更改ajaxdispatcher以接受GET请求并从浏览器导航以查看返回的内容。
if( isset( $_GET['fetch'] ) ){
$httpresponse = new stdClass();
$fb_fetch = new foobar_fetcher();
$httpresponse->data = $fb_fetch->getFoo();
}
echo json_encode( $httpresponse );
导航到/ajaxdispatcher.php?fetch=fetch
答案 1 :(得分:0)
我会做的一些事情可能会提高你成功的机会
在发送JSON代码后立即设置适当的HTTP标头和exit
header('Content-type: application/json');
echo json_encode($httpresponse);
exit;
此外,请确保在此之前没有将任何数据发送到输出缓冲区。
告诉jQuery期待的数据类型
$.ajax({
dataType: 'json',
// and the rest
添加error
回调
$.ajax({
// snip
error: function(jqXHR, textStatus, errorThrown) {
console.log(jqXHR, textStatus, errorThrown);
}
});