php - 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 调用会引发上述错误。它们中的大多数与我在下面显示的非常相似。
有什么建议吗?
解决方案
当查询返回 0 行时,您将返回 HTML 而不是 JSON。改变
} else {
echo "<div class='header'>0 results</div>";
}
至:
} else {
echo json_encode("<div class='header'>0 results</div>");
}
不过,尚不清楚您为什么要返回 JSON。这通常用于返回数组和对象,而不是文本或 HTML。
推荐阅读
- reactjs - React Apollo 显示“react-apollo 仅支持每个 HOC 的查询、订阅或突变”错误
- automation - 实时代码视图 - 如何在按下 CTRL-Z 时防止自动保存和上传到服务器
- api - Kotlin 通用发布请求
- javascript - 用Javascript计算假期
- javascript - 将对象中的键映射到出现的键
- c++ - 将 CMake 与 C++ 继承结合使用时,我应该如何组织我的目录结构?
- math - 从一对浮子到单个浮子的近似可逆函数?
- java - 如何从Java中的给定字符串中删除注释?
- ruby-on-rails - 在 ruby on rails 中显示嵌套的 JSON
- acumatica - PXUIField 属性如何在 2019 R1 中禁用处理页面上的文本编辑框?