2015-11-02 2 views
0

Используя следующий код, я могу генерировать массив, но я хотел бы построить сложный объект JSON, который выглядит следующим образом:JQuery Serialize Форма для JSON строки

<script> 

    $('document').ready(function() { 
     var $myform = $("#myform"), 
      $userData = $myform.find('#userInfo'), 
      $adressData = $myform.find('#adressInfo'), 
      $btnSubmit = $myform.find('button'); 

     $btnSubmit.on('click', function (event) { 
      event.preventDefault(); 
      var formData = $myform.serializeArray(), 
       obj = {}; 

      for(var i=0;i<$userData.length;i++){ 
       obj[formData[i].name] = formData[i].value; 
      } 
      $.ajax({ 
       url: '/create/user', 
       type: 'post', 
       contentType: "application/json", 
       data: $myform.formAsJson(), 
       success:function(){ 
        alert("Great! Everything's OK!"); 
       }, 
       error: function(){ 
        alert("Booo, something wrong :("); 
       } 

      }); 
      return false; 
     }); 
    }) 
</script> 

Вот фактическое JSON структура, которую я хотел бы иметь:

{ 
      "firstName" : "first name ", 
      "lastName" : "last name", 
      "email" : "[email protected]", 
      "pass" : "testitbaby", 
      "address" : { 
      "street" : "street", 
      "zip" : "12345", 
      "city" : "city", 
      "country" : "DE" 
      }, 
      "createDate" : 1445885243494, 
      "isUserActivated" : false 
     } 
+0

Вы хотите 'obj.toString()'? – KeepMove

+0

Что вы подразумеваете под этим? – sparkr

+0

преобразует объект в строку. 'obj' - ваша переменная, содержащая объект. 'toString()' - это функция, которая преобразует ваш объект в строку. – KeepMove

ответ

1

Для удобства чтения я бы создал объект самостоятельно. Нет смысла в сериализации формы в массив, если формат массива не тот, который вы хотите. И нет смысла в сериализации формы в массиве, только для ее прокрутки и создания объекта с одним и тем же набором данных. Вы можете просто создать пользовательский объект и сохранить его простым.

var obj = { 
    firstName: $('#firstName').val(), 
    lastName: $('#lastName').val(), 
    address: { 
     street: $('#street').val(), 
     zip: $('#zip').val() 
    } 
} 

А затем в параметрах AJAX, используйте $.param() для сериализации данных формы для отправки. $.param() создает URL-кодированные строки, такие как name=paparazzoKid&[email protected].

$.ajax({ 
    url: '/create/user', 
    type: 'post', 
    data: $.param(obj), 
    success:function(){}, 
    error: function(){} 
}); 

$ .param() - «Создать упорядоченное представление массива, простой объект, или объект JQuery, пригодный для использования в строке URL запроса или запроса Ajax»

http://api.jquery.com/jquery.param/

Это скриншот из JSFiddle с FireBug открытым. Он показывает объект, который я создал, и отправленные данные.

enter image description here

Чтобы получить доступ к публикуемой строке параметров в PHP, вы бы просто сделать это:

$userStreet = $_POST['address']['street'] 

Если вам нужен формат JSON для страниц сервера, просто кодировать данные POST в формат JSON на вашей серверной страницы. В PHP это просто:

json_encode($_POST).

+0

Я не хочу, чтобы параметры были частью URL-адреса. Я определенно хочу, чтобы это было частью тела POST! Наличие в составе параметров URL-адреса - это не выход! – sparkr

+0

@sparkr: Откуда вы поняли, что параметры указаны в URL-адресе? Вы можете увидеть URL-адрес, который он запросил, с «404 not found» рядом с ним - это единственный URL-адрес, который он запросил. Если это был запрос GET, параметры были бы в URL-адресе, как вы сказали, а не в POST. Строка, закодированная URL-адресом (в разделе «источник» в моем Firebug) - это просто строка с кодировкой URL-адреса, которую он отправляет с запросом. – TheCarver

+0

http://api.jquery.com/jquery.post/- В разделе «данные» говорится: «PlainObject или String. Обычный объект или строка, которая отправляется на сервер с запросом». «Источник» - это строка, которую он отправляет. Mine - это строка с кодировкой URL, а ваша - форматированная строка JSON - нет никакой разницы. – TheCarver

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