В приложении build.gradle вам нужно добавить необходимые зависимости для Dagger для генерации соответствующих классов, как показано ниже:
implementation 'com.google.dagger:dagger-android:2.21'
implementation 'com.google.dagger:dagger-android-support:2.21' // if you use the support libraries
annotationProcessor 'com.google.dagger:dagger-android-processor:2.21'
annotationProcessor 'com.google.dagger:dagger-compiler:2.21'
вы должны изменить версию используемого кинжала.
см. Полный документ кинжала в этом
.
Если вы используете элемент
для активации сериализации и ajax, и если этот элемент
находится внутри ] form
, кнопка
автоматически действует как отправка формы, независимо от того, какое другое назначение .click вы даете ей с помощью jQuery.
и
- одно и то же. Они отправят форму, если поместить ее в элемент
.
отличается. Это обычная кнопка, которая не отправляет форму (если вы специально не заставляете ее отправлять форму через JavaScript).
И в случае, когда элемент form не имеет указанного атрибута действия, это представление просто отправляет данные обратно на ту же страницу. Таким образом, вы увидите обновление страницы вместе с сериализованными данными, появляющимися в URL-адресе, как если бы вы использовали GET в своем ajax.
1 - Сделайте тип
кнопка
. Как объяснялось выше, это предотвратит отправку формы кнопкой.
До:
<form id='myForm'>
<!--Some inputs, selects, textareas, etc here-->
<button id='mySubmitButton'>Submit</button>
</form>
После:
<form id='myForm'>
<!--Some inputs, selects, textareas, etc here-->
<button type='button' id='mySubmitButton'>Submit</button>
</form>
2 - Переместите элемент
за пределы
элемент. Это предотвратит отправку формы кнопкой.
До:
<form id='myForm'>
<!--Some inputs, selects, textareas, etc here-->
<button id='mySubmitButton'>Submit</button>
</form>
После:
<form id='myForm'>
<!--Some inputs, selects, textareas, etc here-->
</form>
<button id='mySubmitButton'>Submit</button>
3 - Добавьте в preventDefault ()
в обработчик нажатия кнопки, чтобы предотвратить отправку формы ( это действие по умолчанию):
попробуйте использовать serializeArray () вместо serialize (). serialize () создаст строку запроса в кодировке url, тогда как serializeArray () создаст структуру данных JSON.
Возможно, это немного глупо, но я создал функцию, которая помогает мне делать именно это, поскольку мне надоело каждый раз делать кучу исправлений. serializeArray немного раздражает, потому что он предоставляет коллекцию объектов, тогда как все, что я хотел, чтобы реконструкция PhP была ассоциативным массивом. Функция, представленная ниже, пройдет через сериализованный массив и создаст новый объект с соответствующими свойствами только тогда, когда значение существует.
Во-первых, функция (она принимает идентификатор рассматриваемой формы):
function wrapFormValues(form) {
form = "#" + form.attr("id") + " :input";
form = $(form).serializeArray();
var dataArray = new Object();
for( index in form)
{
if(form[index].value) {
dataArray[form[index].name] = form[index].value;
}
}
return dataArray;
}
При построении моего сообщений Я также обычно использую объект, так как я обычно помечаю два или три других значения перед данными формы, и я думаю, что это выглядит чище, чем его встроенное определение, поэтому последний шаг выглядит так:
var payload = new Object();
//stringify requires json2.js from http://www.json.org/js.html
payload.data = JSON.stringify(data);
$.post("page.php", payload,
function(reply) {
//deal with reply.
});
На стороне сервера все, что у вас есть сделать это $ payload = json_decode ($ _ POST ['data'], true)
и у вас есть ассоциативный массив, где ключи - это имена полей вашей формы.
Полный отказ от ответственности, множественный выбор здесь, вероятно, не будет работать, вы, вероятно, получите только то значение, которое было последним в списке. Он также создан специально для одного из моих проектов, поэтому вы можете настроить его под себя. Например, я использую json для всех своих ответов с сервера.
Что заставляет вас поверить, что данные добавляются к URL-адресу?
В любом случае, не имеет ли смысл передавать значения формы в самих данных формы? Это позволит вам пропустить этап «разнесения»:
$("#addShowFormSubmit")
.click(function() {
var perfTimes = $("#addShowForm").serialize();
$.post("includes/add_show.php",
$.param({name: $("#showTitle").val()}) + "&" + perfTimes,
function(data) {...});
});
Попробуйте этот синтаксис. Я использую это для сериализации формы и POST через вызов ajax в службу WCF. Кроме того, вы можете отправить его обратно как один объект JSON вместо того, чтобы строить объект, как вы. Попробуйте следующее:
var serializedForm = serializedForm = $("#addShowForm").serializeArray();
$.post("includes/add_show.php",
{
"myObjectName": ("#showTitle").val(), results: perfTimes
}, function(data)
{
$("#addShowSuccess").empty()
.slideDown("slow")
.append(JSON.stringify(serializedForm));
});
На стороне php вы можете посмотреть parse_str . Он проанализирует эту строку URL-адреса на переменные или в массив, если вы используете второй необязательный параметр.
Еще одна возможная причина этой проблемы: если у вас есть форма без каких-либо назначенных ей действий отправки, всякий раз, когда вы нажимаете клавишу «ENTER» во время заполнения формы, форма будет быть отправленным на текущий URL-адрес, поэтому вы увидите, что сериализованные данные отображаются в URL-адресе, как если бы вы использовали транзакцию GET ajax. Простое решение этой проблемы, просто запретите ENTER отправлять форму при ее нажатии:
//Prevent Form Submission when Pressing Enter
$("form").bind("keypress", function(e) {
if (e.keyCode == 13)
return false;
});