SyntaxError: JSON.parse: неожиданный конец данных в строке 2 столбца 1 данных JSON

Я пытаюсь запустить сценарий, который примет 3 переменные с помощью «GET», а затем вернет результат обратно в действие, вызывающее сценарий. Я написал свой php-код и пытаюсь протестировать его с помощью почтальона, но каждый раз, когда я даю ему аргументы, он возвращает = неожиданно ''

вот мой php-код:

<?php
require_once 'connection.php';
header('Content-Type: application/json');


class User{
    private $db; 
    private $connection;
    function __construct(){
    $this->db = new DB_connection();
    $this->connection = $this->db->get_connection();
    }
    public function transaction($emailval, $merchantid, $amount){
        $query= "select amount from wallet_user where email = '$emailval'";
        $result = mysqli_query($this->connection, $query);
        $row=$result->fetch_assoc();
        $resultval = floatval($row['amount']);
        //echo resultval;
        if ($resultval >= $amount){
            $sql = "Select * from wallet_merchant where merchant_id = '$merchantid'";
            $resultm = mysqli_query($this->connection, $sql);

            if (mysqli_num_rows($resultm) > 0) { 
                $query2 = "UPDATE finger.wallet_merchant SET amount = amount + $amount WHERE merchant_id= '$merchantid' ;";
                $query3 = "UPDATE finger.wallet_user SET amount = amount - $amount WHERE email= '$emailval' ;";

                $result2 = mysqli_query($this->connection, $query2);
                $result3 = mysqli_query($this->connection, $query3);

                $json['tsuccess'] = 'Transaction successful!';
                echo json_encode ($json);
                mysqli_close($this->connection);
            }
        }
        else{
            $json['amounterr'] = 'Please add more amount to your wallet!';
            echo json_encode ($json);
            mysqli_close($this ->connection);
            }
    }
}

$user = new User();

if (isset ($_GET['emailval'], $_GET ['merchant_id'], $_GET['amount'] )){
    $emailval = $_GET['emailval'];
    $merchantid = $_GET['merchant_id'];
    $amount = floatval($_GET['amount']);
    if (!empty ($emailval) && !empty($merchantid) && !empty($amount)){
        $user->transaction($emailval, $merchantid, $amount);
    } 
    else{
        echo json_encode("Please enter both fields!");
    }
}

?>

Я не понимаю, что мне здесь не хватает. Это не сценарий connection.php, который вызывает у меня какие-либо ошибки, потому что я запускаю на нем другие сценарии, и они работают нормально, что мне не хватает?

Вы смотрели полученный файл json? Что на первой линии?

KIKO Software 12.04.2018 08:36

@KIKOSoftware Я тоже пробовал запустить его на сервере xampp, кроме синтаксической ошибки показать нечего.

Muhammad Hamza 12.04.2018 08:38

Вероятно, следует частично удалить echo resultval;.

Nigel Ren 12.04.2018 08:39

@NigelRen, это было просто для тестирования, откуда возникла ошибка, к сожалению, я каждый раз получал одну и ту же ошибку

Muhammad Hamza 12.04.2018 08:40

Я предлагаю вам удалить header('Content-Type: application/json') или заменить его на text/plain и проверить сообщение об ошибке полный

Phil 12.04.2018 08:42

Кроме того, если ваш ответ должен быть JSON, вам нужен только вывод один, закодированный JSON. Учитывая, что в вашем скрипте есть несколько точек, в которых он может что-то echo, ваш ответ имеет высокий шанс быть искаженным.

Phil 12.04.2018 08:43

Вы должны изменить последний код на что-то вроде json_encode(["error" => "Please enter both fields!"]);.

Nigel Ren 12.04.2018 08:46

@NigelRen почему? Обычная строка - это совершенно допустимый JSON

Phil 12.04.2018 08:47

@Phil - может быть, но на всем протяжении кода все сообщения делаются по-разному, поэтому я больше смотрел на согласованность.

Nigel Ren 12.04.2018 08:48
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
9
1 469
1

Ответы 1

Проблема здесь echo resultval; Он создаст недопустимый json. Удалите это эхо из своего кода. Никогда не добавляйте вывод до возврата ant json, иначе это создаст проблему

<?php
require_once 'connection.php';
header('Content-Type: application/json');


class User{
    private $db; 
    private $connection;
    function __construct(){
    $this->db = new DB_connection();
    $this->connection = $this->db->get_connection();
    }
    public function transaction($emailval, $merchantid, $amount){
        $query= "select amount from wallet_user where email = '$emailval'";
        $result = mysqli_query($this->connection, $query);
        $row=$result->fetch_assoc();
        $resultval = floatval($row['amount']);       
        if ($resultval >= $amount){
            $sql = "Select * from wallet_merchant where merchant_id = '$merchantid'";
            $resultm = mysqli_query($this->connection, $sql);

            if (mysqli_num_rows($resultm) > 0) { 
                $query2 = "UPDATE finger.wallet_merchant SET amount = amount + $amount WHERE merchant_id= '$merchantid' ;";
                $query3 = "UPDATE finger.wallet_user SET amount = amount - $amount WHERE email= '$emailval' ;";

                $result2 = mysqli_query($this->connection, $query2);
                $result3 = mysqli_query($this->connection, $query3);

                $json['tsuccess'] = 'Transaction successful!';
                echo json_encode ($json);
                mysqli_close($this->connection);
            }
        }
        else{
            $json['amounterr'] = 'Please add more amount to your wallet!';
            echo json_encode ($json);
            mysqli_close($this ->connection);
            }
    }
}

$user = new User();

if (isset ($_GET['emailval'], $_GET ['merchant_id'], $_GET['amount'] )){
    $emailval = $_GET['emailval'];
    $merchantid = $_GET['merchant_id'];
    $amount = floatval($_GET['amount']);
    if (!empty ($emailval) && !empty($merchantid) && !empty($amount)){
        $user->transaction($emailval, $merchantid, $amount);
    } 
    else{
        echo json_encode("Please enter both fields!");
    }
}

?>

Перед выводом json убедитесь, что нет ошибок и других echo.

B. Desai 12.04.2018 08:44

Другие вопросы по теме