Почему функция успеха моей ajaxForm не вызывается?

У меня есть форма, которая загружается через AJAX внутри fancybox. Форма отправляется с использованием ajaxForm, и данные сохраняются в базе данных. Единственная проблема, с которой я столкнулся, заключается в том, что функция «успех» ajaxForm не вызывается.

ответ на звонок во вкладке "Сеть";

<script>
$(document).ready(function() {

// submit form
$('#edit_letting_task').ajaxForm({ 
dataType:  'json',
success:    processJsonEditLettingTask
});

function processJsonEditLettingTask(data) { 
    // 'data' is the json object returned from the server 
    alert(data.message); 
}

});
</script>

    { "message": "Test" }

код edit_letting_task.php (необработанный код);

<?php

require_once('../inc/app_top_cron.php');

?>

<script>
$(document).ready(function() {

// submit form
$('#edit_letting_task').ajaxForm({ 
dataType:  'json',
success:    processJsonEditLettingTask
});

function processJsonEditLettingTask(data) { 
    // 'data' is the json object returned from the server 
    alert(data.message); 
}

});
</script>

    <?php

// process form

if (!empty($_POST)) {

// define and escape each POST as a variable

foreach ($_POST as $key => $value) {

if (!empty($value)) {

${$key} = mysqli_real_escape_string($con, PrepareInput($value));

}
}

// insert data into database

$sql="UPDATE letting_task SET 
letting_task_status = '$letting_task_status',
letting_task_notes = '$letting_task_notes'
WHERE letting_task_id = '$letting_task_id'
";

if (!mysqli_query($con, $sql)) {
  die('Error Inserting Letting Task Data into Database: ' . mysqli_error($con));
} else {
  echo '{ "message": "Test" }';
}

} else {

// define and escape each GET as a variable

if (!empty($_GET)) {

foreach ($_GET as $key => $value) {

if (!empty($value)) {

${$key} = mysqli_real_escape_string($con, PrepareInput($value));

}
}
}

$letting_task_query = mysqli_query($con, "SELECT * FROM letting_task WHERE letting_task_id='" . $letting_task_id . "'") or die(mysql_error());
$letting_task_details = mysqli_fetch_array( $letting_task_query );

// display form

echo '<form id="edit_letting_task" name="edit_letting_task" action="' . SITE_AJAX . 'edit_letting_task.php" method="post">';

echo '<input type="hidden" id="letting_task_id" name="letting_task_id" value="' . $letting_task_id . '">';

// letting task details

echo '<fieldset>
<legend>' . $letting_task_details['letting_task_name'] . '</legend>

<table class="nobord">';

echo '<tr>
    <td><label for="letting_task_status">Status:</label></td>
    <td>';

echo '<select id="letting_task_status" name="letting_task_status" required>';

$letting_task_status_query = mysqli_query($con, "SELECT * FROM letting_task_status ORDER BY letting_task_status_id ASC"); 
while ($letting_task_status_row = mysqli_fetch_array($letting_task_status_query)) {

if ($letting_task_status_row['letting_task_status_id'] == $letting_task_details['letting_task_status']) { $selected = ' selected'; } else { $selected = ''; }

echo '<option value="' . $letting_task_status_row['letting_task_status_id'] . '"' . $selected . '>' . $letting_task_status_row['letting_task_status_name'] . '</option>';

} 

echo '</select>'; 
echo '</td></tr>';

echo '<tr>
<td><label for="letting_task_notes">Notes:</label></td>
<td><textarea id="letting_task_notes" name="letting_task_notes" rows="6" cols="40">' . $letting_task_details['letting_task_notes'] . '</textarea></td>
</tr>';

echo '</table>

</fieldset>';

// actions

echo '<fieldset><legend>Actions</legend>
<table class="nobord">';

echo '<tr><td><input type="submit" value="Save"></td></tr>';
echo '</table>
  </fieldset>';

echo '</form>';

}

mysqli_close($con);

?>

код edit_letting_task.php (вывод HTML);

<script>
$(document).ready(function() {

// submit form
$('#edit_letting_task').ajaxForm({ 
dataType:  'json',
success:    processJsonEditLettingTask
});

function processJsonEditLettingTask(data) { 
    // 'data' is the json object returned from the server 
    alert(data.message); 
}

});
</script>

    <form id="edit_letting_task" name="edit_letting_task" action="https://www.property-system-uk.com/admin-area/ajax/edit_letting_task.php" method="post"><input type="hidden" id="letting_task_id" name="letting_task_id" value="1"><fieldset>
<legend>Application to let received</legend>

<table class="nobord"><tr>
    <td><label for="letting_task_status">Status:</label></td>
    <td><select id="letting_task_status" name="letting_task_status" required><option value="1">Pending</option><option value="2" selected>In Progress</option><option value="3">Completed</option></select></td></tr><tr>
<td><label for="letting_task_notes">Notes:</label></td>
<td><textarea id="letting_task_notes" name="letting_task_notes" rows="6" cols="40"></textarea></td>
</tr></table>

</fieldset><fieldset><legend>Actions</legend>
<table class="nobord"><tr><td><input type="submit" value="Save"></td></tr></table>
  </fieldset></form>

person Michael LB    schedule 18.06.2016    source источник
comment
как вы отправляете ответ? Что вы видите на вкладке сети? Вы получаете ответ 200 или 500?   -  person Jacques ジャック    schedule 18.06.2016
comment
@Jacques Вкладка сети выглядит нормально, получая ответ 200, и база данных обновляется должным образом.   -  person Michael LB    schedule 18.06.2016
comment
Что находится в ответе на этот звонок на вкладке вашей сети?   -  person Jacques ジャック    schedule 18.06.2016
comment
@Jacques - только что отредактировал сообщение с ответом   -  person Michael LB    schedule 18.06.2016
comment
Да, так это твоя проблема. Он ожидает JSON (у вас есть dataType: 'json') и не получает обратно json... Поскольку вы используете AJAX, не публикуйте сообщения на той же странице, на которой вы сейчас находитесь.   -  person Jacques ジャック    schedule 18.06.2016
comment
Спасибо @Jacques! Я внесу некоторые изменения и дам вам знать, как у меня дела!   -  person Michael LB    schedule 18.06.2016
comment
Я думаю, вызывая edit_letting_task.php из вашего ajax, вы просто повторяете всю страницу, которая у вас уже есть, с некоторыми параметрами $_GET   -  person user3791775    schedule 18.06.2016
comment
@Jacques - Вы были правы, как только я разместил сообщение на другой странице, все работает, как и ожидалось. Можете ли вы отправить ответ, чтобы я мог принять?   -  person Michael LB    schedule 18.06.2016
comment
Вы всегда должны регистрировать обратный вызов error для асинхронных операций. Чтобы вы получали информацию, если что-то не получилось и почему.   -  person t.niese    schedule 18.06.2016


Ответы (1)


Для вас было бы лучше создать отдельную конечную точку php для вашего запроса ajax, которая добавляет данные формы в вашу базу данных и возвращает ответ в виде JSON (поскольку это то, о чем вы просите).

Проблема не в вашем JS, а в вашей реализации AJAX. Вы должны получить ответ, а затем обновить dom вашей страницы с данными или показать предупреждение об успешном завершении и т. д., в зависимости от того, что вы хотите сделать.

Единственное, что должна отобразить ваша конечная точка AJAX, — это ответ в формате JSON, и ничего больше.

См. этот вопрос в стеке для получения подробной информации о том, как отвечать с помощью JSON, поскольку вы вообще этого не делаете сейчас. Возврат JSON из PHP-скрипта

person Jacques ジャック    schedule 18.06.2016