【问题标题】:What to do with php after jquery .serialize()jquery .serialize() 之后如何处理 php
【发布时间】:2011-09-04 02:45:32
【问题描述】:

好吧,不知何故,我最难弄清楚这一点,所以我想用一个表单调用 ajax,并使用 jquery 用 .serialize() 对其进行序列化。发送到 php 的数据看起来像这样

key1=value&key2=value2&key3=value3

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

[0] => key1=value1
[1] => key2=value2
[2] => key3=value3

我不能在 php 中使用 $_POST['key1'] 或 $_GET['key1'] 来访问这些值。我该怎么办!!!谢谢

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

编辑:

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

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

【问题讨论】:

  • 如何将变量发送到 PHP?发布该代码(您的 AJAX 代码)。
  • 你能显示发送请求的javascript语句吗?
  • 例如,我为另一个页面创建了这个。查看加载的内容:jfcoder.com/test/serialize.php
  • @Ben - 将该代码添加到您的问题中。
  • 你不需要在 php 中解码任何东西,只需提供你的 javascript 代码,我相信你有一些问题

标签: php jquery forms serialization form-submit


【解决方案1】:

如果您使用 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>

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);
    });
});

编辑

以及processor.php文件内容:

<?php
print_r($_POST);
?>

编辑 2

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

例如,您可以这样做:

var formSubmit = $(this).serialize() + "&formSubmit=true";
$.post('ajax.php', formSubmit);

您将获得相同的效果,并且服务器将能够毫无意外地扩展您的 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);
    });
});

注意将"&amp;formSubmit=true" 添加到串行数据中。这是 PHP 页面的输出:

POST Result

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

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

    [formSubmit] => true
)

编辑 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);
    });
});

输出

POST Result

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

Array
(
    [formSubmit] => true
    [serial] => category-name=&fields%5B%5D=&fields%5B%5D=
)

【讨论】:

  • @Ben - 请参阅编辑 4,了解您的使用结果与我的不同。
  • 我认为您是对的,我发送帖子变量的方式非常令人困惑,并且将其全部作为一个变量发送使其更加顺畅。有效!!!谢谢!!我也是刚刚才知道的。哇,你肯定帮了我这么多!再次感谢伙计。
  • @Ben - 没问题。你可能会阅读 jQuery 的 mergeextend,因为有一天你可能需要它们。
【解决方案2】:

【讨论】:

  • 序列化应该可以正常工作。 JSON 只是向服务器提交数据的另一种方式,它不应该“解决”这个问题。
  • 它会修复的,因为结果我们将在 JS 和 PHP 中有单个对象。
  • 这只是另一种发送数据的方式。
【解决方案3】:

您的值存在于 $_POST 数组的 formInfo 索引中,

print_r( $_POST['formInfo'] );

echo $_POST['formInfo']['key1'];

【讨论】:

    猜你喜欢
    • 2010-10-13
    • 1970-01-01
    • 1970-01-01
    • 2019-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    相关资源
    最近更新 更多