我有一个非常奇怪的问题,无法弄清楚。我正在使用 AJAX/PHP,并通过 ajax 调用从 mysql 数据库中获取有关用户交互的数据。一切都很好,完全没有问题。但是只有一个持续存在的问题是,当在mysql数据库中找不到数据时,服务器ajax文件不会返回用户友好的消息 - 一部分有效,另一部分无效。这是我的代码 -
这是我的第一个表单所在的文件(没有完整的代码;只有js代码)-
<script type="text/javascript">
$(document).ready(function(){
$("#selcustomer").change(function(){
var customers_id = $(this).val();
if(customers_id > 0)
{
$.ajax({
beforeSend: startRequest,
url: "ajax/ajax.php",
cache: false,
data: "customers_id="+customers_id,
type: "POST",
dataType: "json",
success: function(data){
if(data != "No result found.")
{
$("#img_preloader").hide();
$("#error").html('');
// $("#txtfname").val(data.fname);
// $("#txtlname").val(data.lname);
for(var key in data)
{
document.getElementById("txt"+key).value = data[key];
}
}
else
{
$("#img_preloader").hide();
$("#error").html(data);
$("input").each(function(){
$(this).val('');
});
}
}
});
}
else
{
$("#error").html('');
$("input").each(function(){
$(this).val('');
});
}
});
});
function startRequest()
{
$("#img_preloader").show();
}
</script>
这是我与数据库交互的服务器端 ajax 文件(php 文件) -
<?php
include("../includes/db-config.php");
if(isset($_POST["customers_id"]))
{
$customers_id = $_POST["customers_id"];
$query = "SELECT * FROM `tb_customers` WHERE `customers_id` = '$customers_id'";
$rs = mysql_query($query);
if(mysql_num_rows($rs) > 0)
{
$row = mysql_fetch_array($rs);
$customers_first_name = $row['customers_first_name'];
$customers_last_name = $row['customers_last_name'];
$customers_email_id = $row['customers_email_id'];
$customers_phone_no = $row['customers_phone_no'];
$customers_address_line_1 = $row['customers_address_line_1'];
$customers_address_line_2 = $row['customers_address_line_2'];
$customers_country = $row['customers_country'];
$data = array('fname' => $customers_first_name, 'lname' => $customers_last_name, 'emailid' => $customers_email_id, 'phoneno' => $customers_phone_no, 'addressline1' => $customers_address_line_1, 'addressline2' => $customers_address_line_2, 'country' => $customers_country);
echo json_encode($data);
}
else
{
echo "No result found.";
}
}
?>
if 部分工作正常,但是当数据库中找不到数据时,else 部分不会将数据发送回 jQuery 代码。我在浏览器控制台中检查并看到 else 部分返回响应,但 jquery 代码成功:$.ajax 的一部分没有运行 - 既不在 if 内,也不在 else 中,也不在 if/else 之外。我的意思是说,当 mysql 数据库中找不到数据时,不会对成功中的数据触发简单的警报。但是当我删除 ajax/php 文件中的所有数据并说简单地写 123 时,警报会带有 123,但当实际代码存在时不会。你能告诉我这个奇怪问题背后的问题是什么吗?
在 AJAX 调用中,数据类型设置为 JSON,因此返回值必须是有效的 JSON。
当您遇到 else 条件时,您返回的内容不是 JSON.
试试这个——
else
{
echo json_encode("No result found.");
}
或者更灵活的东西——
else{
echo json_encode(Array("err"=>"No result found."));
}
编辑-
。但是当我删除 ajax/php 文件中的所有数据并说简单地写入 123 然后警报附带 123...
这是因为123
(数字)是有效的 JSON。而不是123
,尝试编写No result
,并且会抛出错误,因为No result
(字符串)需要引号(使用json_encode
时会小心)。