无法访问通过jQuery.serialize()接收的数组索引

时间:2015-12-03 16:27:06

标签: javascript php jquery

好吧,我试图通过jQuery serialize获取表单值。这是我的jQuery代码。

$("#add_cus_button").click(function(e){
    e.preventDefault();
    //
    $.ajax({
        type: 'POST',
        url:'ajax.php?requestid=14',
        data:{postdata:$("form#addnew").serialize()},
        success: function(response)
        {

        }
    })
});

这是我的PHP: -

$postdata = explode('&', $_POST['postdata']);
var_dump($postdata);

结果如下: -

enter image description here

现在,如果我尝试访问名为customer_name的字段,我会这样做。

echo $postdata['requestid'];

但这会引发未定义的索引错误。我该如何克服这个问题?

3 个答案:

答案 0 :(得分:1)

.seriliaze()会返回string like a=something&b=whatever...,并且会在GET请求中返回,而不是在POST中需要的arrayobject请求。

要使其返回数组,请使用.serializeArray(),但即使serializeArray也无法在POST请求中使用。所以你需要使用像.serializeObject()这样的东西。

这样的事情:

$.fn.serializeObject = function()
{
   var o = {};
   var a = this.serializeArray();
   $.each(a, function() {
       if (o[this.name]) {
           if (!o[this.name].push) {
               o[this.name] = [o[this.name]];
           }
           o[this.name].push(this.value || '');
       } else {
           o[this.name] = this.value || '';
       }
   });
   return o;
};

答案 1 :(得分:0)

请使用:

data: $("form#addnew").serialize()

这已经是序列化版本。您不需要添加{key: serialized_value}。或者,如果您真的想使用data对象,请使用serializeArray()并将其发送给PHP,但在PHP中,请不要使用以下行:

$postdata = explode('&', $_POST['postdata']); // Don't use this.

答案 2 :(得分:0)

1st:您需要使用

data:$("form#addnew").serialize(),

2nd:如果此序列化看起来像这样

"varname=val&var2=val2"

在php中

<?php
   echo $_POST["varname"];
   echo $_POST["var2"];
 ?>

看看How do I PHP-unserialize a jQuery-serialized form?