Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript post的jQuery.serialize()?_Javascript_Jquery_Forms_Post - Fatal编程技术网

Javascript post的jQuery.serialize()?

Javascript post的jQuery.serialize()?,javascript,jquery,forms,post,Javascript,Jquery,Forms,Post,我正在通过包含表单变量的post执行ajax请求 ajax请求的数据如下所示 data : { somevar1: 'someval1', somevar2: 'someval2', somevar3: 'someval3', somevar4: 'someval4', form: FORMDATA } 正如您所看到的,除了基本表单数据之外,我还传递了一些其他数据 这意味着我不能使用jquery.serialize() 我想最终得到一些我可以发送的东西,所以在另一边

我正在通过包含表单变量的post执行ajax请求

ajax请求的数据如下所示

data : {
  somevar1: 'someval1',
  somevar2: 'someval2',
  somevar3: 'someval3',
  somevar4: 'someval4',
  form:     FORMDATA
}
正如您所看到的,除了基本表单数据之外,我还传递了一些其他数据

这意味着我不能使用jquery
.serialize()

我想最终得到一些我可以发送的东西,所以在另一边我可以做

$\u POST['form']['fieldname']

是否有内置函数来执行此操作

或者我需要做什么来创建一个

在窗体上运行函数的可能性

function postArray(form){
  var data = {};
  var name, value = null;
  $(form).children('textarea, input, select'){
    name = this.name;
    data.name = $(this).val();
  }
  return data;
}
这张表格可以用

data : {
  somevar1: 'someval1',
  somevar2: 'someval2',
  somevar3: 'someval3',
  somevar4: 'someval4',
  form:     postArray(form)
}
这样行吗


我可以使用
.serializeArray()
但另一方面,我得到了

Array
(
  [0] => Array
    (
      [name] => name1
      [value] => val1
    ),
  [1] => Array
    (
      [name] => name2
      [value] => val2
    )
  ...
  [8] => Array
    (
      [name] => name8
      [value] => val8
    )
)
这很接近,但这需要我 a:在数组上循环并将其转换为我想要的

b:每次我使用它来循环查找正确的键时,您都可以使用and将表单数据编码为JSON

serializeArray
提供如下数组:

[
  {
    name: a
    value: 1
  },
  {
    name: b
    value: 2
  }
]
因此,您将无法使用
$data['fieldname']
访问服务器端的数据。要将数组转换为对象(以便您可以像您想访问的那样访问数据),请查看

当然,您也可以只使用自己的函数(如果您修复了错误,它似乎会执行类似的操作),但您仍然必须使用
JSON.stringify

data : {
  somevar1: 'someval1',
  somevar2: 'someval2',
  somevar3: 'someval3',
  somevar4: 'someval4',
  form:     JSON.stringify(postArray(form))
}
然后,在PHP脚本中,可以使用获取表单数据:

$form_data = json_decode($_POST['form']);

——“这是一个固定版本(根据您的评论进行更新,不要在
中为…使用
来循环数组):

如果要修复名称中包含
[]
的元素,必须手动处理这些元素并将其放入数组中:

for(var i = form.length; i--; )
    var name = form[i].name;
    var value = form[i].value;
    var index = name.indexOf(`[]`);
    if( index > -1) {
        name = name.substring(0,index);
        if(!(name in data) {
            data[name] = [];
        }
        data[name].push(value);
    }
    else {
        data[name] = value;
    }
}    
但这假设您没有像
字段
字段[]
这样的字段名,请尝试以下操作:
    Try This:
        <?php 
        /*
         * As a Class File your-class-file.php
         * Decode jQuery Serialize Post String For PHP
         */
         class PHP_Serialize {
         function Decode_Serialize($QUERY_STRING) {
                  /*
                   * Decode form.serelize() jQuery Post String
                   * Return like $_POST['Form_Input_Name or ID']
                   */
                  $a = explode('&', $QUERY_STRING);
                  $i = 0;
                  $store = array();
                  while ($i < count($a)) {
                      $b = explode('=', $a[$i]);
                      $array_name = htmlspecialchars(urldecode($b[0]));
                      $array_value = htmlspecialchars(urldecode($b[1]));
                      $store[$array_name] = $array_value;
                      $i++;
                  }
                   /*
                    * Convert Array as an Object
                    * return(object)$store; 
                    * Use ........Object->Form_Input_Name or ID
                    * or
                    * Use as An Array .........$var["Form_Input_Name or ID"]
                    */
                  return $store;
              }
         }
        ?>
        <?php 
        /*
         * How to USE:
         * In Your PHP File (your-file.php)
         * Include Class File like include('your-class-file.php');
         * $Decode = new PHP_Serialize();
         * Use Function Like This $_POST = $Decode->Decode_Serialize($_POST['Query_String']);
         */

        /*
         * Demo HERE
         * you-file.php
         */
        include('your-class-file.php');
        $Decode = new PHP_Serialize();
        $_POST = $Decode->Decode_Serialize($_POST['Query_String']);
        /* Decode jQuery Serlize String AS a PHP Function if you not making Class file */
        $_POST = Decode_Serialize($_POST['Query_String']);
        /* Use POST String in your mySQL Statement Like This*/
        mysql_query("SELECT * FROM Table WHERE COMPANY_NAME = '".$_POST['COMPANY_NAME']."'");


        /*
         * Here is Your form PHP File
         */

        ?>
        <form action="" method="post" id="your-form-id" name="your-form-id">
        <label for="COMPANY_NAME">Company Name:</label>
        <input type="text" name="COMPANY_NAME" id="COMPANY_NAME"/>
        <label for="COMPANY_EMAIL">Company Email:</label>
        <input type="text" name="COMPANY_EMAIL" id="COMPANY_EMAIL"/>
        <input type="button" name="submit" id="submit" value="submit"/>
        </form>


        <script>
        $(document).ready(function() {
            $('#submit').click(function(){

                var Post_String = $('#your-form-id').serialize();
                $.ajax({
                type    :   'POST',
                url     :   'your-file.php',
                data    :   {Query_String:Post_String},
                success :   function(return_value){/* On Success you jQuery Code Here*/}
                });

            });

        });
        </script>

因为,在另一方面,当执行print\u r($\u POST['form'])时,我会返回看起来应该是get字符串的内容。虽然我可以在服务器端对此进行分解,但我不希望。您的额外变量是通过js计算的还是与页面一起提供的?对于页面(是的,我知道我可以始终将它们设置为隐藏输入,但是表单是通过ajax生成的,并且根据具体情况而有所不同)干杯,再次出现细微变化:
函数postArray(form){var data={};form=$(form).serializeArray();for(form中的var i)data[form[i].name]=form[i].value;return data;}
我想如果可以,为什么不使用jQuerys内置函数呢?请随时用此更新您的答案,我会删除注释。嗯,效果很好,但如果我在控制台中输入:
$('[name=keywords[]]')。val()
输出是
$('[“什么”,“另一个”]
,这很好,但是当我在服务器上打印结果时,我得到
[type]=>电子邮件[keywords[]=>另一个
,作为pre的输出,我如何修复它?希望得到
[type]=email[keywords]=>数组(什么,另一个)
或类似的东西
    Try This:
        <?php 
        /*
         * As a Class File your-class-file.php
         * Decode jQuery Serialize Post String For PHP
         */
         class PHP_Serialize {
         function Decode_Serialize($QUERY_STRING) {
                  /*
                   * Decode form.serelize() jQuery Post String
                   * Return like $_POST['Form_Input_Name or ID']
                   */
                  $a = explode('&', $QUERY_STRING);
                  $i = 0;
                  $store = array();
                  while ($i < count($a)) {
                      $b = explode('=', $a[$i]);
                      $array_name = htmlspecialchars(urldecode($b[0]));
                      $array_value = htmlspecialchars(urldecode($b[1]));
                      $store[$array_name] = $array_value;
                      $i++;
                  }
                   /*
                    * Convert Array as an Object
                    * return(object)$store; 
                    * Use ........Object->Form_Input_Name or ID
                    * or
                    * Use as An Array .........$var["Form_Input_Name or ID"]
                    */
                  return $store;
              }
         }
        ?>
        <?php 
        /*
         * How to USE:
         * In Your PHP File (your-file.php)
         * Include Class File like include('your-class-file.php');
         * $Decode = new PHP_Serialize();
         * Use Function Like This $_POST = $Decode->Decode_Serialize($_POST['Query_String']);
         */

        /*
         * Demo HERE
         * you-file.php
         */
        include('your-class-file.php');
        $Decode = new PHP_Serialize();
        $_POST = $Decode->Decode_Serialize($_POST['Query_String']);
        /* Decode jQuery Serlize String AS a PHP Function if you not making Class file */
        $_POST = Decode_Serialize($_POST['Query_String']);
        /* Use POST String in your mySQL Statement Like This*/
        mysql_query("SELECT * FROM Table WHERE COMPANY_NAME = '".$_POST['COMPANY_NAME']."'");


        /*
         * Here is Your form PHP File
         */

        ?>
        <form action="" method="post" id="your-form-id" name="your-form-id">
        <label for="COMPANY_NAME">Company Name:</label>
        <input type="text" name="COMPANY_NAME" id="COMPANY_NAME"/>
        <label for="COMPANY_EMAIL">Company Email:</label>
        <input type="text" name="COMPANY_EMAIL" id="COMPANY_EMAIL"/>
        <input type="button" name="submit" id="submit" value="submit"/>
        </form>


        <script>
        $(document).ready(function() {
            $('#submit').click(function(){

                var Post_String = $('#your-form-id').serialize();
                $.ajax({
                type    :   'POST',
                url     :   'your-file.php',
                data    :   {Query_String:Post_String},
                success :   function(return_value){/* On Success you jQuery Code Here*/}
                });

            });

        });
        </script>