Ajax получено 500 Внутренняя ошибка сервера при использовании json_encode () - PullRequest
0 голосов
/ 20 февраля 2020

Я пытался использовать простой запрос Ajax с JS и PHP. Мой код:

тест. js

$(document).ready(function () {
    $.ajax({
        url: window.location.href + 'test.php',
        type: 'GET',
        data: { 'testing': 'hey' },
        success: function (data) {
            console.log(data);
        },
        error: function (xhr, desc, err) {
            console.log(xhr);
            console.log('Details: ' + desc + '\nError: ' + err);
        }
    });

});

тест. php

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

$myObj->name = "John";
$myObj->age = 30;
$myObj->city = "New York";

$json = json_encode($myObj);

echo $json;

index. php

<?php
include('db.php');

// ...
?>
<script src="./webroot/test.js" type="text/javascript"></script>

Однако он выдал ошибку 500. Я проверил как Ajax post, так и Ajax get и получил одинаковый результат. Однако, если я не использовал json_encode и просто вместо этого выводил эхо, ошибка исчезала, и я мог видеть сообщение на консоли.

test2. php

<?php
include('../db.php');

echo "this thing will work even though I didn't need";

Я проверил php error_log, ничего не получил. Добавьте заголовок ('Access-Control-Allow-Origin: *'); ", все тот же. Эхо json_last_error (), нет ответа даже на сообщение об ошибке.

Консоль: enter image description here

enter image description here

В этом случае я не смогу использовать любую JS -библиотеку. Любая помощь будет очень признательна.

Edit: $ before json_encode() на самом деле является опечаткой, которую я написал, задавая вопрос. Мой текущий код не имел его и все еще получил 500. Edit2: Еще одна опечатка. Мой текущий код правильно закрыл тег.

Ответы [ 3 ]

1 голос
/ 20 февраля 2020

PHP имеет несколько встроенных функций для обработки JSON.

Объекты в PHP можно преобразовать в JSON с помощью функции PHP json_encode ():

include('../db.php');
header('Content-Type: application/json');

$myObj->name = "John";
$myObj->age = 30;
$myObj->city = "New York";

$myJSON = json_encode($myObj);

echo $myJSON;

Демо

1 голос
/ 20 февраля 2020

вы получаете ошибку 500 из-за неправильного синтаксиса в вашем php файле теста. php

обновите код теста. php с кодом ниже

 <?php
  include('../db.php');
    header('Content-Type: application/json');
    $myObj = array();
    $myObj['name'] = "John";
    $myObj['age'] = 30;
    $myObj['city'] = "New York";
    $json = json_encode($myObj);
    echo $json;

и Я не знаю, что вы используете какой-то фреймворк, потому что вы не закрываете конец файла PHP end tag?> Обязательно очистите и это.

0 голосов
/ 21 февраля 2020

Благодаря @ vivek_23 я понял, что проблема не в моем коде (так как код работал нормально на локальном хосте), а в моем удаленном сервере. PHP на моем удаленном сервере не поддерживает JSON.

Для тех, у кого возникла такая же проблема: вы можете запустить

var_dump(function_exists('json_encode'));

и посмотреть, вернется ли true или false . Вы также можете запустить phpinfo(), чтобы увидеть, есть ли раздел, в котором написано «json support: enabled». Видеть JSON в разделе «Авторы модулей» ничего не значит.

Поскольку мой удаленный сервер работает на CentOS, я скачал пакет JSON:

yum install php-json.x86_64

и это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...