2016-05-19 4 views
2

Я хотел бы иметь код для добавления или удаления из закладок базы данных. Код готов, и он добавляет и удаляет из закладок базы данных правильно, но когда я вызываю функцию, он продолжает возвращать json error вместо json success, даже если код работает.json_encode возвращает 200 и не определено

Я хотел бы знать, что случилось с кодом (что я и адаптируются откуда-то еще), так как на стороне клиента не принимает правильные значения 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)); 
} 

клиента:

<script> 
    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); 
      } 
     }); 
    } 
</script> 

console.log(data.status + ' ' + data.added); Лог 200 undefined

Как я могу вернуть правильные значения true или false как для "status" и "added"?


Edit: json success никогда не войти в консоль, так что я не знаю, что произошло на стороне сервера. Мне нужно это знать, потому что мне нужно изменить класс элемента, чтобы отобразить пустую или желтую звездочку.

+1

Вы действительно действительно отправляете выход клиенту где-то. –

+2

Прошло некоторое время с тех пор, как я работал с PHP, но разве вы не должны выходить из JSON? 'echo json_encode (...)'. –

+1

Отправьте их как целые числа и обработайте их при возврате. Булевские значения проблематичны для отправки. –

ответ

4

Если вы используете return результат и ничего не делаете с возвратом в другом месте, вы не получите никакого ответа на ваш вызов ajax, так что это undefined. Как говорит @MikeC, в какой-то момент вы должны echo.

Если вы еще не вторя его в другом месте, попробуйте:

$response = array(
    'status' => $isFavourite, 
    'added' => !$isFavourite 
); 
echo json_encode($response); 

Мое предложение также если «статус» и «добавил» действительно просто противоположностью друг друга каждый раз, то вы, вероятно, только нужно для отправки статуса «самостоятельно». В вашем JS вы можете просто проверить «статус» и отменить логическое значение, как я сделал выше, если вы хотите знать, что такое значение added.

var added = !data.status; 

Update

Если запрос Аякса возвращается к функции error, сам запрос, вероятно, не удается.

Изменение функции ошибки в этом, отлаживать, что случилось:

'error': function(jqXHR, status, error) { 
    console.log(status); 
    console.log(error); 
} 

Вы, возможно, ошибка в стороне сервера код где-то или вы звоните неправильный скрипт может быть?

+0

Но мне нужно, чтобы функция была успешной и что там произошло, если закладка была добавлена ​​или удалена. Я просто привел пример того, что я получаю со стороны сервера. – William

+1

@William Я понимаю, но вы эхом отдаете 'json_encode()' где-то в PHP? Вы понимаете, что 'return json_encode()' сам по себе не отправит ничего с сервера на JS? – BadHorsie

+0

У меня получилось, я изменил 'return' на' echo' и изменил 'array ("status" => false, "added" => true) 'to' "status" => true', но все же я получаю только номер 200, вызывающий 'console.log (data)'. – William

Смежные вопросы