Ajax调用没有返回JSON错误

时间:2013-12-17 08:25:04

标签: php jquery ajax json mysqli

我有一个客户端视图,它通过AJAX调用PHP文件来更新表单后面的数据库。该视图是基本的CRUD操作,主要由一个Form和一组输入组成:

HTML

<div class="item-details">
    <form id="item-info-form">
        <input type="hidden" name="id" value="1" />
                <input type="text" name="name" size="50" value="Item 1" />
                <input type="text" id="start_date" name="start_date" value="2012-01-13" />
                <input type="text" id="end_date" name="end_date" value="2014-02-03" />
                <input type="text" name="location" size="50" value="Home" />
                <select name="item_type">
                    <option value="1" selected="selected"> Type 1 </option>
                    <option value="2"> Type 2 </option>
                    <option value="3"> Type 3 </option>
                </select>
     <button id="update-item-info">Save Changes</button>
    </form>

点击按钮后,我调用php脚本通过AJAX更新有问题的项目。

的Javascript

$('#update-item-info').on('click', function (e)
{
    e.preventDefault();
    console.log("Updating Item Info...");
    $.ajax({
        type: "POST",
        url: "AJAX/save-item-info.php",
        data: $('#item-info-form').serialize(),
        dataType: "application/JSON"
    }).done(function (data)
    {
        console.log(data.status);
    });

});

此代码发布到的服务器PHP是:

<?php

include("../db-connection.php"); 
$mysqli = new mysqli($mysqli_host, $mysqli_user, $mysqli_pass, $db_name);

if ($mysqli->connect_errno) 
{
    $response_array['status']  = "Connect failed: %s\n" . $mysqli->connect_error;
}

if(!($stmt = $mysqli->prepare("UPDATE items SET name = ?, start_date = ?, end_date = ?, location = ?, exhibit_type = ? WHERE id = ?")))
{
    $response_array['status']  = "Prepare Statement failed: " . $mysqli->error . "\n";
}

if (!($stmt->bind_param('sssssi', $_POST['name'], $_POST['start_date'], $_POST['end_date'], $_POST['location'], $_POST['exhibit_type'], $_POST['id'])))
{
    $response_array['status']  = "Binding parameters failed: " . $stmt->error . "\n";
}

if (!($stmt->execute())) 
{
    $response_array['status']  = "Execute failed: " . $stmt->error . "\n";
}
else
{
    $response_array['status']  = "Success";
}

$stmt->close();

header('Content-type: application/json');
die(json_encode($response_array));

?>

这会更新数据库,如果一切正常,firebug会告诉我data.status设置为“Success”。

但是如果我注释掉数据库包含(模拟可怕的错误),服务器代码根本不会返回任何内容,更不用说data.status了,我只是得到一个通用的500错误。

最奇怪的是,无论数据库是否更新,ajax.done()都没有触发,因此我无法看到是否设置了data.status。

1 个答案:

答案 0 :(得分:1)

dataType (default: Intelligent Guess (xml, json, script, or html))

使用:

dataType: 'json',

http://api.jquery.com/jQuery.ajax/

另外,使用

echo json_encode($response_array);

而不是

 die(json_encode($response_array));