Неожиданный конец ввода JSON Ajax php - PullRequest
0 голосов
/ 05 сентября 2018

Я получаю следующую ошибку при вызове AJAX на моем веб-хостинге:

Status: parsererror: Error: SyntaxError: Unexpected end of JSON input

Этот скрипт отлично работает при локальном тестировании с использованием XAMPP, возвращает данные без проблем. Есть несколько кнопок, которые пользователь может нажать, которые в данный момент сделают AJAX-вызов. Некоторые функции работают нормально, другие, похоже, ничего не возвращают после запуска этих скриптов на нашем провайдере веб-хостинга.

Это пример одного из вызовов AJAX:

function vesselajax(){
    $.ajax({
            url: 'vesselajax.php',
            method: 'GET',
            data: {},
            dataType:'json',
            success: function(data){
                document.getElementById("vesseltable").innerHTML = '<tr><th>FCM</th><th>Hull ID</th><th>Manu ID</th><th>Name</th><th>Manufacturer</th><th>Length</th><th>Year</th><th>Value</th><th>Owner</th><th>Loss Payee</th><th>Base</th></tr>' + data;
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) { 
                alert("Status: " + textStatus); alert("Error: " + errorThrown); 
        }  
        });
}

Вот код из vesselajax.php

<?php
require 'login.php';
$connection = new mysqli($host, $user, $pword, $database, 3306);
if ($connection ->connect_error) die($connection ->connect_error);
$query = "select v.vessel_table_id, v.vessel_fcm, v.vessel_hull_id, v.vessel_name, v.vessel_length, v.vessel_manufacturer, v.vessel_manufacturer_id, v.vessel_year, v.vessel_value, o.owner_name, l.loss_payee_name, b.base_name
from vessel v
join owner o
on o.owner_id = v.owner_id
join loss_payee l
on l.loss_payee_id = v.loss_payee_id
join base b
on b.base_id = v.base_id";
$result = $connection->query($query);
if ($result->num_rows > 0) {
    $counter = 1;
    $data = "";
    while($row = $result->fetch_assoc()) {
        $_SESSION['vti'] = $row['vessel_table_id'];
        $data .= "<tr><td>". $row["vessel_fcm"]. "</td><td>". $row["vessel_hull_id"]. "</td><td>". $row["vessel_manufacturer_id"]. "</td><td>". $row["vessel_name"]. "</td><td>". $row["vessel_manufacturer"]. "</td><td>". $row["vessel_length"]. "</td><td>". $row["vessel_year"]. "</td><td>". $row["vessel_value"]. "</td><td>". $row["owner_name"]. "</td><td>". $row["loss_payee_name"]. "</td><td>". $row["base_name"]. "</td><td>"."<a href='removevessel.php?vti=".$_SESSION['vti']."'><button type='button' rel='tooltip' title='Remove' class='btn btn-danger btn-simple btn-xs'><i class='fa fa-times'></i></button></a><button name='".$_SESSION['vti']."' id='".$counter."' onclick='editvesselnow(this.name,this.id);' type='button' rel='tooltip' title='Edit' class='btn btn-warning btn-simple btn-xs'><i class='fa fa-edit'></i></button>"."</td></tr>";
        $counter++;
    }
    echo json_encode($data);
} else {
    echo "<div class='header'>0 results</div>";
}
$connection->close();
?>

Прежде чем вы упомянете что-то о готовых утверждениях, я сейчас проверяю:)

Эти сценарии отлично работают локально, извлекая все связанные данные, но при загрузке в веб-среду вышеуказанная ошибка генерируется только для нескольких из этих вызовов AJAX. Большинство из них очень похожи на то, что я показываю ниже.

Любой совет?

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Из моего php-файла я удалил: echo encode_json ($ data) и переключил его просто на echo ($ data).

Кроме того, при вызове ajax обязательно измените dataType с json на «html»

0 голосов
/ 05 сентября 2018

Когда запрос возвращает 0 строк, вы возвращаете HTML вместо JSON. Изменение

} else {
    echo "<div class='header'>0 results</div>";
}

до:

} else {
    echo json_encode("<div class='header'>0 results</div>");
}

Не совсем понятно, почему вы возвращаете JSON. Обычно используется для возврата массивов и объектов, а не текста или HTML.

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