json_encode返回200并且未定义
我想要一个代码来添加或删除数据库书签。 代码已准备就绪,它正确地添加和删除数据库书签,但是当我调用该函数时,即使代码工作,它也会继续返回json error
而不是json success
。
我想知道代码有什么问题(我从其他地方得到并适应)因为客户端没有接收到正确的值true
或false
,它只触发json beforeSending
和json error
。
服务器端:
if($isFavorite) { // if it's favorite, remove from bookmarks return json_encode(array("status" => true, "added" => false)); } else { // if it's not favorite, include into bookmarks return json_encode(array("status" => false, "added" => true)); }
客户端:
function addItemToUsersList(userId, type, itemId) { jQuery.ajax({ 'url': 'xxx', 'type': 'GET', 'dataType': 'json', 'data': {userid: userId, type: type, itemid: itemId}, 'success': function(data) { console.log('json success'); }, 'beforeSend': function() { console.log('json beforeSending'); }, 'error': function(data) { console.log('json error'); console.log(data.status + ' ' + data.added); } }); }
console.log(data.status + ' ' + data.added);
line logs 200 undefined
如何为"status"
和"added"
返回正确的值true
或false
?
编辑: json success
永远不会记录在控制台上,所以我不知道服务器端发生了什么。 我需要知道这一点,因为我需要更改元素的类以显示空的或黄色的星。
如果你return
结果并且没有在其他地方做任何返回,你将不会得到任何对你的ajax调用的响应,所以它是undefined
。 正如@MikeC所说,你必须在某个时候echo
它。
如果您还没有在其他地方回复它,请尝试:
$response = array( 'status' => $isFavourite, 'added' => !$isFavourite ); echo json_encode($response);
我的建议是,如果’status’和’added’实际上每次都是相反的,那么你可能只需要自己发送’status’。 如果你想知道added
的值是什么,你可以在你的JS中检查’status’并反转我在上面做过的布尔值。
var added = !data.status;
更新
如果您的ajax请求返回error
函数,请求本身可能会失败。
将您的错误function更改为此,以调试发生的事情:
'error': function(jqXHR, status, error) { console.log(status); console.log(error); }
您可能在某处的服务器端代码中出现错误,或者您可能正在调用错误的PHP脚本?