json_encode создает неправильный JSON (с лишним скрытым характером)

Я использую PHP json_encode() для возврата некоторых данных, полученных с помощью jQuery ajax() :

Упрощенный JS:

 $.ajax({ dataType: 'json', contentType: 'application/json', cache: false, type: 'POST', url: './api/_imgdown.php', error: function(jqXHR, textStatus, errorThrow) { console.log(jqXHR, textStatus, errorThrow); }, success: function(data, textStatus, jqXHR) { console.log(data, textStatus, jqXHR); } }); 

PHP:

 header('Content-Type: application/json; charset=UTF-8'); //default apiResponse $apiResponse = [ "status" => 1, "message" => "success", "data" => null ]; 

Затем, когда php запускает мой код, он заканчивается добавлением этих данных:

 $apiResponse['data'][] = [ "mid" => (int)$mid, "card_type" => $card_type, "header_size" => (int)$headers['Content-Length'], "saved_size" => (int)filesize($imgSavePath), "saved_path" => $imgSavePath ]; //spit out the JSON echo json_encode($apiResponse); exit(); 

JSON:

 {"status":1,"message":"success","data":[{"mid":340052,"card_type":"kakusei","header_size":48337,"saved_size":48337,"saved_path":"..\/card\/kakusei\/340052.png"}]} 

Сначала это кажется правильным. Мой Ajax, который извлекает этот PHP, всегда заканчивается parseerror (таким образом, он входит в часть error ajax() ).

Если вы скопируете и вставьте этот JSON на http://jsonlint.com/ , он говорит, что «Неожиданный токен» и http://jsonformatter.curiousconcept.com/ недействительны.

Я пробовал echo json_encode($apiResponse, JSON_UNESCAPED_SLASHES); даже несмотря на то, что сбрасывание косой черты в порядке \/ но не имеет никакого значения.

Но что не совсем верно? Разве PHP не должен был возвращать действительный JSON?

Дополнительная информация: тестирование на Windows7, Chrome v28.XX, использование PHP 5.4.XX на Apache

Вопросы, которые я прочитал, прежде чем отправлять это сообщение:

  • json_encode создает неверные данные JSON?
  • https://stackoverflow.com/a/15654848/684932
  • о json_encode и ajax dataType: "json"
  • php json_encode не возвращает правильную кодировку json

Обновить:

Копирование из SO в JSONlint дает действительный json. Поэтому я немного исследовал и заметил, что PHP создает странный скрытый символ, который фактически делает json недействительным. См. Снимок экрана ниже. Как я это исправим? Недопустимый символ json

Это может быть проблема с меткой спецификации. Попробуйте сохранить файл как обычно UTF-8.

Я столкнулся с одной и той же проблемой, но не смог найти, какой файл на моей Windows был сохранен в UTF8 с помощью спецификации (хотя я пытался найти файлы столько, сколько мог).

Однако я обнаружил обходной путь. Предполагая, что на стороне сервера у меня есть

 die(json_encode(array( 'OK' => 1 ))) 
  1. При вызове $ .ajax я удаляю запись «тип данных:« json », и я получаю доступ к ответу со следующими строками:
 success: function (response) { var data = $.parseJSON(response); console.log(data.OK); // = 1 } 
  1. При вызове $ .ajax я все еще сохраняю запись «тип данных:« json », затем мне нужно получить доступ к значению внутри ответа, как это

var dataOK = response ['OK']; // = 1