0

我将表单数据传递给 PHP 脚本以通过 JS( jQuery.ajax()) 进行处理。

问题是 - 我想不出一种方法来访问 PHP 中的单个表单控件值(例如$_POST['zipcode'])。

相反,我只能使用 访问数据$_POST['form'],这是一个表示为一个长字符串(例如string(89)"color=red&color=blue&zipcode=12345...")的完整表单。

如何访问通过 JS 从 HTML 表单传递的 PHP 脚本中的表单数据的各个值?

index.php(表格)

 <form id="myform">
    <select name="color" id="color">
    <option value="Red">Red</option>
    <option value="Green">Green</option>
    <option value="Blue">Blue</option>
    </select>
    <input type="text" id="zipcode" name="zipcode" />
    <input type="submit" id="submit" name="submit" value="Submit" />
    </form>

索引.php(JS)

$('#myform').on('submit', function(e) {
                    e.preventDefault();
                    $.ajax({
                        type: 'POST',
                        dataType: 'html',
                        url : 'PHPscript.php',
                        data: {form : $('#myform').serialize()}
                    }).done(function(data) {
                         var myJSONresult = data;
                         alert(myJSONresult);
                    });
                });

PHP脚本

<?php
if(isset($_POST["form"])){
$form = $_POST["form"];

$myzipcode = $_POST['zipcode']; // won't work; will be null or empty

echo json_encode($form);

}
?>

编辑: 邮政编码字段:

$("#zipcode").focus(function(){
                    if(this.value == "zipcode"){
                        $(this).val("");
                    }
                }).blur(function(){
                    if(this.value == ""){
                        $(this).val("zipcode");
                    }
                });
4

3 回答 3

2

您需要在表单数据上使用 serializeArray() 而不是序列化。这将作为一个数组提交。

data: $('#myform').serializeArray()

HTML

<input type="hidden" name="action" value="submit" />

PHP

if(isset($_POST["action"]))
{
    //code
}
于 2012-05-28T16:23:08.683 回答
1

添加dataType: 'json'到您的 ajax 处理程序并进一步修改您的代码,如下所示:

$.ajax({
    type: 'POST',
    dataType: 'json', // changed to json
    url : 'PHPscript.php',
    data: {form : $('#myform').serialize()},
    success : function(data){ // added success handler
     var myJSONresult = data;
     alert(myJSONresult.yourFieldName);
    }
});
于 2012-05-28T16:23:26.297 回答
1

将传统设置为 true like

$.ajax({
traditional:true,
//your rest of the ajax code
});

在 php 端,你得到的值很好,问题出在表单序列化端

于 2012-05-28T16:29:42.820 回答