JQuery AJAX данных по полям формы - PullRequest
       0

JQuery AJAX данных по полям формы

1 голос
/ 27 сентября 2011

Я обрабатываю форму с помощью jQuery ajax.
У меня есть следующий код JQuery:

$.ajax({
  url: 'formprocess.php',
  type: 'post',
  data: $('#myForm input[type=\'text\']'),
  dataType: 'json',
  success: function(json) { alert('pass'); }
 });

И моя форма:

<form id="myForm">
  <input type="text" name="parent[47]child[230][26]" value="1" />
  <input type="text" name="parent[47]child[230][27]" value="2" />
  <input type="text" name="parent[28]child[231][29]" value="3" />
  <input type="text" name="parent[28]child[231][31]" value="4" />
</form>

И он отлично работает для постов через ajax.

На стороне PHP это выглядит как:

$_POST
: array = 
  parent: array = 
    47: array = 
      child: array = 
        230: array = 
          26: string = "1"
          27: string = "2"
    28: array = 
      child: array = 
        231: array = 
          29: string = "3"
          31: string = "4"

Но я бы хотел разделить его на стороне JavaScript, чтобы он зацикливался и передавал каждому родителю отдельно. Так что в этом случае он будет отправлять обратно дважды:

$_POST
: array = 
  parent_id = 47
  child: array = 
      230: array = 
        26: string = "1"
        27: string = "2"

И

$_POST
: array = 
  parent_id = 28
  child: array = 
       231: array = 
         29: string = "3"
         31: string = "4"

Так что я думаю, что мне нужно использовать:

$('#myForm input[type=\'text\']').each(function(i, tbox) {
    tboxname = tbox.attr('name');
    var myregexp = /parent\[(\d+)\]child\[(\d+)\]\[(\d+)\]/;
    var match = myregexp.exec(tboxname);
    var parent_id = match[1];
    var child = 'child['+match[2]+']['+match[3]+']';
}

Но теперь у меня есть 2 строковых значения, и я потерял свой объект и значение.

1 Ответ

1 голос
/ 27 сентября 2011

Вы правы - использование .each() в этом случае является правильным подходом, но оно просто позволит вам перебирать каждый элемент input и не будет ничего знать о «массиве» внутри name атрибут для каждого.Это, кажется, ваша основная проблема здесь;javascript просто видит значение вашего параметра name как строку, а не массив значений.

Я бы не думал об этом как о многомерном массиве в глазах js ...каждая () просто увидит один большой список элементов, которые вам нужно придумать для анализа вашей собственной логики.

Вот что я бы попробовал ...

var parsedData = {};
$('#myForm input[type=\'text\']').each(function(i){
    var thisInput = $(this);
    var thisName = $(this).attr('name');

    // parse your string here, by using conditional statements or maybe by using eval()
    // ... This is where "your own logic" mentioned above would go =)

    parsedData.["someValue"+i] = thisInput.val();
});

...И отсюда вы могли бы использовать parsedData var для перехода на ваш $.ajax вызов.

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...