首页 > 解决方案 > JSON输入Ajax php的意外结束

问题描述

在我的网络托管服务上进行 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();
?>

在您提到有关准备好的语句之前,我现在只是在测试:)

这些脚本在本地运行良好,可以提取所有相关数据,但是当加载到 Web 环境中时,只有少数 AJAX 调用会引发上述错误。它们中的大多数与我在下面显示的非常相似。

有什么建议吗?

标签: phpajax

解决方案


当查询返回 0 行时,您将返回 HTML 而不是 JSON。改变

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

至:

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

不过,尚不清楚您为什么要返回 JSON。这通常用于返回数组和对象,而不是文本或 HTML。


推荐阅读