jQuery сериализирует и $ .post

В приложении 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'

вы должны изменить версию используемого кинжала.

см. Полный документ кинжала в этом

.

22
задан Blazemonger 4 April 2012 в 14:15
поделиться

7 ответов

Если вы используете элемент - одно и то же. Они отправят форму, если поместить ее в элемент

.

type = 'button'

отличается. Это обычная кнопка, которая не отправляет форму (если вы специально не заставляете ее отправлять форму через JavaScript).

И в случае, когда элемент form не имеет указанного атрибута действия, это представление просто отправляет данные обратно на ту же страницу. Таким образом, вы увидите обновление страницы вместе с сериализованными данными, появляющимися в URL-адресе, как если бы вы использовали GET в своем ajax.

Возможные решения

1 - Сделайте тип

18
ответ дан 29 November 2019 в 05:18
поделиться

попробуйте использовать serializeArray () вместо serialize (). serialize () создаст строку запроса в кодировке url, тогда как serializeArray () создаст структуру данных JSON.

7
ответ дан 29 November 2019 в 05:18
поделиться

Возможно, это немного глупо, но я создал функцию, которая помогает мне делать именно это, поскольку мне надоело каждый раз делать кучу исправлений. 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 для всех своих ответов с сервера.

2
ответ дан 29 November 2019 в 05:18
поделиться

Что заставляет вас поверить, что данные добавляются к URL-адресу?

В любом случае, не имеет ли смысл передавать значения формы в самих данных формы? Это позволит вам пропустить этап «разнесения»:

$("#addShowFormSubmit")
  .click(function() { 
      var perfTimes = $("#addShowForm").serialize(); 
      $.post("includes/add_show.php", 
         $.param({name: $("#showTitle").val()}) + "&" + perfTimes, 
         function(data) {...}); 
  });
3
ответ дан 29 November 2019 в 05:18
поделиться

Попробуйте этот синтаксис. Я использую это для сериализации формы и 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)); 
        });
0
ответ дан 29 November 2019 в 05:18
поделиться

На стороне php вы можете посмотреть parse_str . Он проанализирует эту строку URL-адреса на переменные или в массив, если вы используете второй необязательный параметр.

0
ответ дан 29 November 2019 в 05:18
поделиться

Еще одна возможная причина этой проблемы: если у вас есть форма без каких-либо назначенных ей действий отправки, всякий раз, когда вы нажимаете клавишу «ENTER» во время заполнения формы, форма будет быть отправленным на текущий URL-адрес, поэтому вы увидите, что сериализованные данные отображаются в URL-адресе, как если бы вы использовали транзакцию GET ajax. Простое решение этой проблемы, просто запретите ENTER отправлять форму при ее нажатии:

//Prevent Form Submission when Pressing Enter
$("form").bind("keypress", function(e) {
if (e.keyCode == 13)
    return false;
});
0
ответ дан 29 November 2019 в 05:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: