【问题标题】:Using jQuery .serialize() within ajax array to pass the PHP $_POST as Variables?在 ajax 数组中使用 jQuery .serialize() 将 PHP $_POST 作为变量传递?
【发布时间】:2012-02-13 14:44:40
【问题描述】:

这是我用来将表单详细信息发送到 php 函数的 jQuery 代码:

jQuery(document).ready(function($) {    
    jQuery('.submit').click(function(){
        var str = $("#ajaxForms").serialize();
        var data = {
            action: 'myajax-submit',
            serialize: str,
            beforeSend: function(){
                alert('Sending...');
            }
        };  
        jQuery.post(MyAjax.ajaxurl, data,  function(response) {
            alert('Got this from the server: ' + response);
        });
        return false;   
    });
});

这是php函数:

function myajax_submit() {
    $whatever = $_POST['serialize'];
    echo $whatever;
    die(); 
}

一切正常,但是当警告框出现时,文本会显示来自我的 html 表单 #ajaxForms 的一串值。我相信这是因为 php 函数回显了$_POST['serialize']。

在我的表单中,我有一个输入框,例如:

<input id="postID" name="postID" value="First Name" type="text" />

但是当我尝试在 php 中回显 $_POST['postID'] 变量时,它不会在警报框中显示任何内容。

我认为通过将表单数据序列化到 php 函数,我可以使用与表单输入关联的 $_POST 变量?

帮助表示赞赏。 :)

【问题讨论】:

  • 我不懂 PHP,但您的 postID 不会是您作为数据传递的序列化对象的成员。

标签: php jquery serialization


【解决方案1】:

通过使用 jQuery 的 serialize 序列化表单输入,您可以创建如下字符串:

a=1&b=2&c=3&d=4&e=5&postID=10

为了获得 postId,您需要反序列化 $_POST['serialize']。为此,您应该执行以下操作:

parse_str($_POST['serialize'], $whatever);

现在$whatever['postID'] 就是您要搜索的内容。

编辑:修复 parse_str() :)

【讨论】:

  • 感谢回复,我尝试了以下但没有结果:function myajax_submit() { $whatever = parse_str($_POST['serialize']); echo $whatever['postID']; die(); }
  • @MattStrange 做一个echo $_POST['serialize']; 你得到了什么?
  • 只是函数中的回显,我从表单中得到一个字符串,postID=First+Name&GreetingAll=Hello+Everyone!
  • @MattStrange 啊,对不起。我写错了 parse_str。请查看编辑
  • 感谢 mobius,你的男人!似乎一切正常:)
【解决方案2】:

您以错误的方式实施$.post。 .serialize() 返回一个字符串。因此,当您将serialize: str 传递给$.post() 时,不再添加表单本身,而是包含序列化表单的纯字符串。

下面的代码是正确的,使用$.ajax(见注释行)。

jQuery('.submit').click(function(){
    var str = $("#ajaxForms").serialize();
    // If you realllly. want a parameter serialize, uncomment the following line
    // str += '&serialize=' + encodeURIComponent(str);
    str += '&action=myajax-submit';
    jQuery.ajax(MyAjax.ajaxurl, {
        method: 'POST',
        data: str,
        success: function(response) {
            alert('Got this from the server: ' + response);
        },
        beforeSend: function(){
            alert('Sending...');
        }
    });
    return false;   
});

【讨论】:

  • 嘿,Rob,我尝试了以下代码,但收到了一个空结果,我不知道为什么,我删除了 method: 'POST',因为 wordpress 处理 jQuery 的方式不同。我正在关注本指南,codex.wordpress.org/AJAX_in_Plugins
  • 按字面意思使用我的代码。如果需要,您可以使用 jQuery.post,但 beforeSend 将不起作用。见此代码:pastebin.com/4DVQih3i
猜你喜欢
  • 2011-12-23
  • 1970-01-01
  • 1970-01-01
  • 2012-05-29
  • 2016-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多