JSON输入Ajax php意外结束

时间:2018-09-04 21:14:59

标签: php ajax

在我的网络托管服务上进行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调用抛出上述错误。其中大多数与我在下面显示的内容非常相似。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

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

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

收件人:

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

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

答案 1 :(得分:0)

从我的php文件中删除:echo echo__json($ data)并将其切换为仅echo($ data)。

此外,在ajax调用中,请确保将dataType从json更改为“ html”