SyntaxError: неожиданный токен & lt; в JSON в позиции 0 в JSON.parse (& lt; анонимно & gt;) — AngularJS

Я совершенно уверен, что все аргументы, которые я привел в register() иметь значения. Это js код.

$scope.register = function(
$reg_code, $prov_code, $citymun_code, $brgy_code, $street,
$user_name, $user_email, $user_contact, $user_password
) {
//displays the arguments
alert("region: " + $reg_code + ", province: " + $prov_code + ", citymun: " + $citymun_code   +  ", barangay: "+ $brgy_code + ", street: " + $street + ", user_name: " + $user_name + ", user_email: " + $user_email + ", user_contact: "+ $user_contact + ", user_password: " + $user_password);

$http({
method: "POST",
url: "http://" + host + "/mobile/register.php",
data: JSON.stringify({
user_password_reg: $user_password,
user_email_reg: $user_email,
user_contact_reg: $user_contact,
user_name_reg: $user_name,
region: $reg_code,
province: $prov_code,
citymun: $citymun_code,
barangay: $brgy_code,
street: $street,
echo: "1",
success: "0",
user_acc_type: "log account"}),
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}).then(function(res) {
alert("success1: " + res.data.success1 + ", success2: " + res.data.success2 + ", success3: " + res.data.success3);
});}

Это скрипт php

<?php
header('Access-Control-Allow-Origin: *');
header('Content-Type: application/json; charset=utf-8');

//converts data to post
$postData = file_get_contents("php://input");
$post = json_decode($postData);$echo = array();
$echo["success1"] = 0;
$echo["success2"] = 0;
$echo["success3"] = 0;

if(isset($post["region"]) &&
isset($post["province"]) &&
isset($post["citymun"]) &&
isset($post["barangay"]) &&
isset($post["street"]) &&
isset($post["user_password_reg"]) &&
isset($post["user_name_reg"]) &&
isset($post["user_email_reg"]) &&
isset($post["user_contact_reg"])
) {
$echo["success1"] = 1;
$echo["success2"] = 1;
$echo["success3"] = 1;

} else {

$echo["success1"] = 2;
$echo["success2"] = 2;
$echo["success3"] = 2;
}

echo json_encode($echo);
?>

Эта программа еще не завершена. Сначала я хотел убедиться, что php получает все нужные параметры из post и возвращает или echoэто правильное значение. Тем не менее, в этом коде я получаю эту ошибку в консоли.

SyntaxError: Unexpected token < in JSON at position 0
at JSON.parse (<anonymous>)
at fromJson (ionic.bundle.js:9892)
at defaultHttpResponseTransform (ionic.bundle.js:17406)
at ionic.bundle.js:17491
at forEach (ionic.bundle.js:9150)
at transformData (ionic.bundle.js:17490)
at transformResponse (ionic.bundle.js:18216)
at processQueue (ionic.bundle.js:22016)
at ionic.bundle.js:22032
at Scope.$eval (ionic.bundle.js:23228)

если < читается в выводе json php, это означает, что произошла ошибка со стороны php-кода. Мне довольно сложно отлаживать код php, так как AngularJS автоматически анализирует данные из php. Следовательно, я не вижу деталей ошибки. И кроме того, я действительно сомневаюсь, что этот простой скрипт php будет иметь ошибку.

Заранее спасибо.

1

Решение

Ваш PHP-код, вероятно, вызывает ошибку, приводящую к HTML-ответу.

Скорее всего, это связано с тем, что вы пытаетесь получить доступ к свойствам объекта в виде индексов массива, вызывая что-то вроде

Неустранимая ошибка: невозможно использовать объект типа stdClass в качестве массива

Измените свой код на

$post = json_decode($postData, true);

Увидеть http://php.net/manual/function.json-decode.php#refsect1-function.json-decode-parameters


Я также предполагаю, что вы используете Content-Type: application/x-www-form-urlencoded держать просьбу просто. Я бы посоветовал text/plain вместо этого, поскольку ваши данные, безусловно, не закодированы в URL.

$http.post("http://" + host + "/mobile/register.php", {
user_password_reg: $user_password,
user_email_reg: $user_email,
user_contact_reg: $user_contact,
user_name_reg: $user_name,
region: $reg_code,
province: $prov_code,
citymun: $citymun_code,
barangay: $brgy_code,
street: $street,
echo: "1",
success: "0",
user_acc_type: "log account"}, {
headers: { 'Content-type': 'text/plain' }
})
2

Другие решения

Других решений пока нет …