我有一个与此问题非常类似的问题:jquery json function returning null。
然而,我已按照上述建议进行操作,结果仍然看到null
。
这是我的代码:
JS:
Gallery.prototype.getImages = function(opt){
var self = this;
var baseurl = 'http://local.gallery.dev'
$.ajax({
url: baseurl+='/controllers/ajax.php',
type: 'POST',
contentType: 'application/json; charset=utf-8',
data: {action : opt},
dataType: 'JSON',
success: function(data){
//self.setImages(data);
console.log(data)
},
error: function(){
console.log('NOPE');
}
});
}
PHP:
class ajax_controller {
function __construct(){
if(isset($_POST['action']) && !empty($_POST['action'])) {
$action = $_POST['action'];
switch($action) {
case 'Newborn' : $this->Newborn();
break;
}
}
}
/*
* Process Newborn Gallery request.
*/
public function Newborn(){
header('Content-type: application/json');
echo json_encode(array(
'images/gallery/albums/newborn/kylie/thumbnail/kylie-album.jpg',
'images/gallery/albums/newborn/payton/thumbnail/payton-1-thumbnail.png'
));
}
}
控制台/调试器/网络面板都说我正在正确地与ajax控制器通信,但是,success方法的data
只返回null。
我对PHP很新手,非常感谢任何建议。
谢谢,Ken
更新
我的调用仍然返回null,所以我想我会在这里粘贴标题。
Request URL:http://local.sunnyrose.dev/controllers/ajax.php
Request Method:POST
Status Code:200 OK
Request Headersview source
Accept:application/json, text/javascript, */*; q=0.01
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Content-Length:14
Content-Type:application/json; charset=UTF-8
Host:local.sunnyrose.dev
Origin:http://local.sunnyrose.dev
Referer:http://local.sunnyrose.dev/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.11 (KHTML,
like Gecko) Chrome/17.0.963.56 Safari/535.11
X-Requested-With:XMLHttpRequest
Request Payload
action=Newborn
Response Headersview source
Connection:Keep-Alive
Content-Length:0
Content-Type:application/json
Date:Mon, 05 Mar 2012 17:49:53 GMT
Keep-Alive:timeout=5, max=92
Server:Apache/2.2.14 (Unix) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.8l PHP/5.3.1 mod_perl/2.0.4
Perl/v5.10.1
X-Powered-By:PHP/5.3.1
答案 0 :(得分:3)
在构造函数结束时回显。我认为你不会在控制器中回显任何东西,所以ajax响应为空。 你使用哪个框架?
答案 1 :(得分:2)
我认为这不会产生有效的JSON。如果你想要一个带数字键的实际数组,那么在PHP数组中使用数字键:
echo json_encode(array(
1 => 'images/gallery/albums/newborn/kylie/thumbnail/kylie-album.jpg',
2 => 'images/gallery/albums/newborn/payton/thumbnail/payton-1-thumbnail.png'
));
OR
echo json_encode(array(
'images/gallery/albums/newborn/kylie/thumbnail/kylie-album.jpg',
'images/gallery/albums/newborn/payton/thumbnail/payton-1-thumbnail.png'
));
将输出以下js:
[
'images/gallery/albums/newborn/kylie/thumbnail/kylie-album.jpg',
'images/gallery/albums/newborn/payton/thumbnail/payton-1-thumbnail.png'
]
答案 2 :(得分:2)
在你的/controllers/ajax.php文件中运行你的函数吗?
class ajax_controller {
function __construct(){
if(isset($_POST['action']) && !empty($_POST['action'])) {
$action = $_POST['action'];
switch($action) {
case 'Newborn' : return $this->Newborn();
break;
}
}
}
/*
* Process Newborn Gallery request.
*/
public function Newborn(){
header('Content-type: application/json');
return json_encode(array(
'images/gallery/albums/newborn/kylie/thumbnail/kylie-album.jpg',
'images/gallery/albums/newborn/payton/thumbnail/payton-1-thumbnail.png'
));
}
}
$controller = new ajax_controller;
echo $controller->__construct();
答案 3 :(得分:1)
您正在使用url
url: '/controllers/ajax.php',
尝试使用完整的url
喜欢
var baseurl = 'http://www.example.com';
url: baseurl+'/controllers/ajax.php',
修改强>
尝试更改
header('Content-type: application/json')
到
header('Content-type: text/json');
或
header('Content-type: text/plain');
https://stackoverflow.com/questions/267546/correct-http-header-for-json-file
答案 4 :(得分:0)
我终于在标题周围挖掘并意识到问题是。ajax()
向我的PHP脚本发送了一个空数组。
解决方法是摆脱PHP脚本中的contentType: 'application/json; charset=utf-8
和header()
函数。
现在发送和接收数据就好了。 (去阅读配置文档)
感谢所有的帮助 - 我的脚本因为其他原因而被打破了,但你的答案很多:)