【问题标题】:jQuery Serialize() is not working in Ajax POSTjQuery Serialize() 在 Ajax POST 中不起作用
【发布时间】:2014-05-11 13:12:59
【问题描述】:

这是我的 AJAX 请求

$(document).ready(function(){
        $("#register-submit").click(function(){
        var formdata = {hotelname: $('#hotelName').val(), contactType: $('#contactType').val(), contactNumber: $('#contactNumber').val(), addrOne: $('#addrLineOne').val(), addrTwo: $('#addrLineTwo').val(),cityName: $('#cityName').val(), stateName: $('#stateName').val(),localityName: $('#localityName').val(), pincode: $('#pincode').val(), managerName: $('#mngrName').val(), managerEmail: $('#mngrEmail').val(), managerPhone: $('#mngrPhone').val()}
        jQuery.ajax({
                url: "../api/v1/admin/ch_partialBusinessRegister.php",
                data: JSON.stringify(formdata),
                type: "POST",
                async: false,
                success: function(res) {
                    var result = res.Result;
                    if(result.success === true)
                        {
                            alert("Random Password is Generated : "+res.Result.password);
                            window.location.reload();
                        }
                        else
                            alert("Registration Failed. "+res.Result.msg);
                }
            });

    });
});

在我的 ch_partialBusinessRegister.php 中

$inputJson = file_get_contents('php://input');
$post_vars = json_decode($inputJson, true);
$businessName = $post_vars['hotelname'];
$address1 = $post_vars['addrOne'];
$address2 = $post_vars['addrTwo'];
$locality = $post_vars['localityName'];
$city = $post_vars['cityName'];
$state = $post_vars['stateName'];
$zip = $post_vars['pincode'];
$mName = $post_vars['managerName'];
$mEmail = $post_vars['managerEmail'];
$mPhone = $post_vars['managerPhone'];

能够获取数据并将其成功传递到 POST 参数中。但是当我将表单数据更改为

$(document).ready(function(){
            $("#register-submit").click(function(){
            var formdata = $('form').serializeArray();
            jQuery.ajax({
                    url: "../api/v1/admin/ch_partialBusinessRegister.php",
                    data: JSON.stringify(formdata),
                    type: "POST",
                    async: false,
                    success: function(res) {
                        var result = res.Result;
                        if(result.success === true)
                            {
                                alert("Random Password is Generated : "+res.Result.password);
                                window.location.reload();
                            }
                            else
                                alert("Registration Failed. "+res.Result.msg);
                    }
                });

        });
    });

然后 JSON.stringify 它,它通过像这样的 POST 参数发送变量

[{"name":"hotelName","value":"test"},{"name":"contactType","value":"LandLine"},{"name":"contactNumber[]","value":""},{"name":"AddrOne","value":"test"},{"name":"addrTwo","value":"test"},{"name":"pincode","value":"test"},{"name":"mngrName","value":"test"},{"name":"mngrEmail","value":"test"},{"name":"mngrPhone","value":"test"}]

但在 PHP 中它不读取值。

如果我用同样的方法

var mydata = $('form').serialize();
 data: JSON.stringify(mydata)

它发布此数据,但 PHP 不读取

"hotelName=&contactType=LandLine&contactNumber%5B%5D=&AddrOne=&addrTwo=&pincode=&mngrName=test&mngrEmail=test&mngrPhone=test"

【问题讨论】:

  • $('form').serialize(); ???
  • 是的,我只是通过jQuery序列化HTML表单
  • 但是在这里您使用的是serializeArray(),那么为什么不使用serialize() 并为每个输入使用相关的名称属性呢?
  • @A.Wolff 使用 serialize() 及其 POST 数据更新了问题。 Serialize 和 serializeArray 都不适合我
  • hotelName != hotelname 开始修复它,所有属性都一样name

标签: jquery json post serialization


【解决方案1】:

你可以添加这个

$(document).ready(function(){
        $("#register-submit").click(function(){
           jQuery.ajax({
           url: "../api/v1/admin/ch_partialBusinessRegister.php",
           type: 'post',
          data: {'inputJson': $('form').serialize()},
          dataType: 'json',
          success: function(res) {
                    var result = res.Result;
                    if(result.success === true)
                        {
                            alert("Random Password is Generated "+res.Result.password);
                            window.location.reload();
                        }
                        else
                            alert("Registration Failed. "+res.Result.msg);
                }
            });

    });
});

在您的 php 文件中,您只需键入即可解码数组

$inputJson=$_POST['inputJson'];
$post_vars = json_decode($inputJson, true);

如果你想获取表单标签的值

you can simply write

$tagValue=$post_vars['tagName']; // tag name inside the form which is sent using ajax

【讨论】:

  • 即使我直接使用 $_POST 从表单标签中获取值,它也会显示 PHP 中的未定义索引。它传递 Post 值,但 PHP 没有读取它。
  • 对不起,我写错了,没有这样的帖子 $tagValue=$_POST['tagName'];相反,你应该写 $tagValue=$post_vars['tagName'];我现在将编辑代码
【解决方案2】:

只需按原样传递您的“myData”对象。不要把它串起来。

【讨论】:

  • 在那种情况下如何在PHP中解析它?我也在 php 中做了一个 json_decode
  • 我不懂 PHP,但是 jquery 接受这个对象,并将它作为 [key=value] 对发送到服务器,所以我猜你应该像通常阅读的那样处理它PHP 中的请求参数……这里没什么特别的……
猜你喜欢
  • 2012-06-07
  • 1970-01-01
  • 1970-01-01
  • 2016-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多