【问题标题】:Send array with alphanumeric keys with Ajax to PHP script使用 Ajax 将带有字母数字键的数组发送到 PHP 脚本
【发布时间】:2015-07-08 15:19:16
【问题描述】:

我需要从 ajax 发送到 php 的字母数字数组中接收键和值的名称。

从此:

<input class="input" name="one" value="1" onchange="myFunction()">        
<input class="input" name="two" value="2" onchange="myFunction()">   
<input class="input" name="three" value="3" onchange="myFunction()"> 

从循环中解析出来的

{% for x in y %}
   <input class="input" name="{{ x.k }}" value="{{ x.v }}" onchange="myFunction()">
{% endfor %}

我需要像这样打印_r():

Array
(
    ['one'] => 1,
    ['two'] => 2,
    ['three'] => 3,
)

如果我这样做:

 function myFunction() {
    var elementy = document.getElementsByClassName('input');
    var data = {};    
    var key = elementy[0].name;
    var value = elementy[0].value;
    data = { key: value};

    $.ajax({
           url: "{{ path('test') }}",
           type: "POST",
           data: {data:data} ,
    }); 
  }

print_r($data) 返回:

Array
(
    [key] => 1
)

如果我这样做:

function myFunction() {
    var elementy = document.getElementsByClassName('input');
    var data = {};    
    data = {elementy[0].name : elementy[0].value};

    $.ajax({
           url: "{{ path('test') }}",
           type: "POST",
           data: {data:data} ,
    });   
}

这行有Uncaught SyntaxError: Unexpected token [data = {elementy[0].name : elementy[0].value};

我需要这样做:

function myFunction() {
    var data = []; 
    var elementy = document.getElementsByClassName('input');

    for (var i = 0; i < elementy.length; i++){ 
        data[elementy[i].name] = elementy[i].value;
    }

    $.ajax({
      url: "{{ path('test') }}",
      type: "POST",
      data: {data:data}
    });   
}

但没有语法错误Uncaught SyntaxError: Unexpected token [

【问题讨论】:

    标签: javascript php jquery arrays ajax


    【解决方案1】:

    如果字段周围有一个form 元素,最简单的方法是serialize 表单:

    data: $('form').serialize()
             ^^^^ if you have more forms, address it by its ID or something similar
    

    如果没有表格,也可以使用:

    data: $('.input').serialize()
    

    serialize 也可用于处理单个表单控件的选择。

    【讨论】:

      【解决方案2】:
      var input_arr = $('input.input');
      var data = [];
      var i = 0;
      input_arr.each(function(){
      data[i] = {
          name:$(this).attr('name') ,
          value:$(this).val()
      };
      i++;
      });
      

      希望对你有帮助:)

      【讨论】:

        【解决方案3】:

        而不是

        function myFunction() {
            var data = []; 
            var elementy = document.getElementsByClassName('input');
        
            for (var i = 0; i < elementy.length; i++){ 
                data[elementy[i].name] = elementy[i].value;
            }
        
            $.ajax({
              url: "{{ path('test') }}",
              type: "POST",
              data: {data:data}
            });   
        }
        

        应该是

        function myFunction() {
            var data = {}; 
            var elementy = document.getElementsByClassName('input');
        
            for (var i = 0; i < elementy.length; i++){ 
                data[elementy[i].name] = elementy[i].value;
            }
        
            $.ajax({
              url: "{{ path('test') }}",
              type: "POST",
              data: {data:data}
            });   
        }
        

        【讨论】:

          猜你喜欢
          • 2012-02-18
          • 1970-01-01
          • 1970-01-01
          • 2017-08-09
          • 1970-01-01
          • 2012-05-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多