如果在mysql数据库中找不到数据,为什么静态消息不是来自ajax文件?

时间:2014-04-02 13:30:22

标签: php jquery mysql ajax

我有一个非常奇怪的问题,无法弄明白。我正在使用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但不是当实际代码存在时。你能告诉我这个奇怪的问题背后的问题是什么?

1 个答案:

答案 0 :(得分:1)

您的数据类型在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(数字)是valid JSON。而不是123,请尝试编写No result并抛出错误,因为No result(字符串)需要引号(使用json_encode时要小心)。< / p>