2013-12-17 7 views
0

У меня есть вид клиента, который вызывает файл PHP через AJAX для обновления базы данных за формой. Взгляд основные операции CRUD, и состоит в основном из формы и набора входов:Ajax вызов не возвращает ошибку JSON

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 

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)); 

?> 

Это делает обновление базы данных, и если все пойдет правильно, поджигатель говорит мне, что данные. статус установлен на «Успех».

НО, если я прокомментирую базу данных, включите (чтобы имитировать что-то ужасное), код сервера ничего не возвращает, а тем более data.status, и я просто получаю общую ошибку 500.

Как ни странно, независимо от того, обновлена ​​база данных или нет, ajax.done() не запускается, поэтому я не вижу, установлено ли значение data.status.

+1

'dataType:" json "' –

ответ

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)); 
+0

Это было точно, хотя .done все еще ничего не возвращает, если скрипт обновления терпит неудачу. Я попытался добавить метод .fail, но .fail (data) {console.log (data.status)} выводит только заголовок ошибки сообщения (500). –

+0

Удаление заголовка не сработало, но мне удалось заставить метод .fail работать с .fail (function (xhr) {console.log (xhr.responseJSON.status);}); –

+0

@ Kevin Whiteside Great !! –

Смежные вопросы