Я решил проблему. Для тех, кто найдет этот вопрос и ответ в будущем, это то, что я должен был сделать:
Во-первых, это пример функции загрузки (при условии, что вы используете jQuery):
$(function () {
$("#div_id").dialog({
autoOpen: false,
closeOnEscape: true,
modal: true,
width: 600,
title: "Your Title",
buttons: {
"SUBMIT": function() { $("#form_id").submit() },
"CANCEL": function() {
// Other clean-up functions here
$("#div_id").dialog("close");
}
},
close: function() {
// Other clean-up functions here
$("#div_id").dialog("close");
}
});
});
Убедитесь, что ваш вызов submit() помещен внутри
function(){ }
Когда я этого не делал, мои формы продолжали пытаться отправить себя, как только страница загружалась. Когда я поместил их в строку кода выше, это прекратилось.
Все, что последует, идет после функции onload, описанной выше.
Во-вторых, установите переменную параметров ajaxForm:
var ajaxFormOptionsVariable = {
beforeSubmit: ajaxFormPreSubmitFunction,
success: ajaxFormPostSubmitFunction,
type: "post",
dataType: "json"
};
Теперь несколько слов о параметрах ajaxForm. Что должно быть очевидным (но может и не быть — и это нормально), так это то, что вы можете назвать свою переменную как угодно. Что может быть менее очевидным, так это то, что вам понадобится отдельная переменная для каждого диалогового окна формы, которое вы будете иметь на странице. Будьте осторожны с именами!
Функции, названные вашей функцией «beforeSubmit» и функциями «успеха», также могут называться как угодно. Если у вас есть разные формы, требующие разной обработки, вам нужно определить разные функции для каждой формы. Опять же, будьте осторожны с вашим именем!
Ваша функция «beforeSubmit» не является обязательной. Вы также можете использовать «get» для «type», и я знаю, что есть другие параметры для «dataType», но я их не знаю (и в настоящее время они не нужны). Однако, если вы не хотите, чтобы ваши данные отправлялись в виде объекта json, изучите подключаемый модуль, чтобы найти свои варианты.
В-третьих, создайте экземпляр объекта ajaxForm:
$('#form_id').ajaxForm(ajaxFormOptionsVariable);
В-четвертых, определите свои функции «beforeSubmit» и «success»:
function ajaxFormPreSubmitFunction(response, statusText, xhr, $form) {
// Whatever processing you want to do before the form is submitted -
// probably validation
}
function ajaxFormPostSubmitFunction(response, statusText, xhr, $form) {
// Whatever processing you want to do after the form is submitted
// This is where displaying a message to the user happens
}
Несколько слов об аргументах, предоставляемых вашим функциям обратного вызова. Во-первых, ответ — это то, где будет находиться то, что вы получите от сервера. Во-вторых, вам не нужно
response = $.parseJSON(response);
Ответ обрабатывается автоматически. В обратном вызове отправки сообщения моего скрипта я фактически возвращаю массив, в котором один элемент является значением true/false, а другой — любым сообщением, которое я хочу отобразить пользователю, например:
if (response['result'] == true) {
$("#success_dialog").html(response['message']);
$("#success_dialog").dialog("open");
}
else {
$("#error_dialog").html(response['message']);
$("#error_dialog").dialog("open");
}
Итак, это все. У меня был неправильный код, чтобы это сделать. После некоторого разочарования у меня это работает. Я хотел вернуться и поделиться им, чтобы вопрос можно было пометить как ответ (чтобы никто не тратил на это время, так как я решил его), а также помочь всем, кто может наткнуться на это сообщение в будущем.
person
Clement Smith
schedule
28.03.2013