在jquery .serialize()之后如何处理php

Ben*_*Ben 3 php forms jquery serialization form-submit

好吧,不知怎的,我有最困难的时间来解决这个问题,所以我想用一个表单调用ajax,并使用jquery用.serialize()来序列化它.发送给php的数据看起来像这样

key1=value&key2=value2&key3=value3
Run Code Online (Sandbox Code Playgroud)

我正在使用帖子请求.它看起来很简单,但不知何故我很难弄清楚如何访问这些键/值对,我不能使用explode()on&因为这会给我

[0] => key1=value1
[1] => key2=value2
[2] => key3=value3
Run Code Online (Sandbox Code Playgroud)

并且我无法在php中使用$ _POST ['key1']或$ _GET ['key1']来访问这些值.我该怎么办!!!谢谢

作为一个侧面问题,我注意到.serilize()用%0A替换换行符,用+替换白色空格,我如何用php解码这些值?再次感谢!

编辑:

嘿,jquery代码是相当基本的:

var formSubmit = $(this).serialize();
$.post('ajax.php',{"formSubmit": "true", "formInfo": formSubmit}
Run Code Online (Sandbox Code Playgroud)

Jar*_*ish 6

如果您使用jQuery的Ajax功能提交表单数据,那么使用时应该没有问题.serialize().服务器应该看到并自动urldecode POST内容.

作为演示,请参阅以下代码:

HTML

<form id="category-dynamic" class="dynamic">
   <fieldset id="inner-fieldset">
      <legend id="new-category">
        <label for="category-name">Category Name: </label>
        <input type="text" name="category-name" value="" />
      </legend>
      <ul id="category-fields">
         <li>
           <label>Field #1:</label><br />
           <input type="text" name="fields[]" value="" />
         </li>
         <li>
           <label>Field #2:</label><br />
           <input type="text" name="fields[]" value="" />
         </li>
      </ul>
   </fieldset>
</form>
<h3>POST Result</h3>
<pre></pre>
Run Code Online (Sandbox Code Playgroud)

jQuery的

$(document).ready(function(){
    $('pre').html($('#category-dynamic').serialize());

    $.post("http://jfcoder.com/test/processor.php", $('#category-dynamic').serialize(), function(data){
         $('pre').html($('pre').html()+"\n\n"+data);
    });
});
Run Code Online (Sandbox Code Playgroud)

编辑

和processor.php文件内容:

<?php
print_r($_POST);
?>
Run Code Online (Sandbox Code Playgroud)

编辑2

我认为您的错误是您发送内容的方式是使表单数据成为文本字符串而不是url编码的内容.

例如,你可以这样做:

var formSubmit = $(this).serialize() + "&formSubmit=true";
$.post('ajax.php', formSubmit);
Run Code Online (Sandbox Code Playgroud)

而且你会有同样的效果,服务器可以扩展你的POST变量而不会发生意外.

编辑3

看这个例子:

代码是:

$(document).ready(function(){
    var serial = $('#category-dynamic').serialize() + "&formSubmit=true";
    $('pre').html(serial);
    $.post("http://jfcoder.com/test/processor.php", serial, function(data){
         $('pre').html($('pre').html()+"\n\n"+data);
    });
});
Run Code Online (Sandbox Code Playgroud)

请注意添加"&formSubmit=true"到串行数据.这从PHP页面输出:

POST Result

category-name=&fields%5B%5D=&fields%5B%5D=&formSubmit=true

Array
(
    [category-name] => 
    [fields] => Array
        (
            [0] => 
            [1] => 
        )

    [formSubmit] => true
)
Run Code Online (Sandbox Code Playgroud)

编辑4

这使用您描述的方法.看到不同?

$(document).ready(function(){
    var serial = $('#category-dynamic').serialize();
    $('pre').html(serial);
    $.post("http://jfcoder.com/test/processor.php", {"formSubmit":"true","serial":serial}, function(data){
         $('pre').html($('pre').html()+"\n\n"+data);
    });
});
Run Code Online (Sandbox Code Playgroud)

OUTPUT

POST Result

category-name=&fields%5B%5D=&fields%5B%5D=

Array
(
    [formSubmit] => true
    [serial] => category-name=&fields%5B%5D=&fields%5B%5D=
)
Run Code Online (Sandbox Code Playgroud)