2012-07-06 27 views
1

我发布表单数据,其中包含一些复选框和其他输入到使用jQuery的.serialize()的PHP脚本。使用.serialize()发布表单数据PHP错误

post.js:

$(function(){ 
$("#button").click(function(){ 
    $.ajax({ 
     type: "POST", 
      url: "post.php", 
      data: $("form#input").serialize(), 

    success: function(data){ 
     $.getJSON('post.php', function(data) { 
         $.each(data, function(key, val) { 

         }) 
     }) 
    } 
    }) 
    }) 
}) 

post.php中:

$tags = array(); 
foreach($_POST['checkboxes'] as $key => $value){ 
    $tags[] = "$value"; 
} 
$json = array(
    array(
    "tags" => $tags, 
), 
); 
echo json_encode($json); 

如果我点的getJSON到post.php中我得到了我的错误日志中的PHP警告说:“PHP的警告:为foreach()提供了无效的参数“,这会导致输入表单中的数据无法正确传递(即在foreach没有写入任何内容后进行fwrite)。如果我引用getJSON的另一个文件,比如说data.php,或者如果我根本没有包含它,这个帖子就可以正常工作。这是为什么发生?我可以只存储数据并创建第二个脚本来返回JSON数据,但在一个脚本中完成所有操作会更容易。

回答

3

这里的交易:

success: function(data){ 

在上面的一块,你recieving数据是返回json_encoded string containing key:value pairs of $tags,为您定义。

$.getJSON('post.php', function(data) { 

现在,在您的getJSON请求你越过任何值,和你的foreach语句希望你张贴复选框的值,因此它们可以被解析,标签进行。我不太确定我是否理解你为什么要这样做,因为success: function(data)将本机解析从服务器返回的JSON并将为您做好准备。

$.each(data, function(key, val) { 

如果你只是单纯的失去了$.getJSON请求,并使用各项功能,你会在你从服务器返回一个标记迭代。我相信这是你想要的功能。当复选框未公布

$tags = array(); 
if(array_key_exists('checkboxes', $_POST) && is_array($_POST['checkboxes'])) { 
    $tags = array_values($_POST['checkboxes']); 
} 

$json = array(
    array(
    "tags" => $tags, 
), 
); 
echo json_encode($json); 
+0

谢谢并感谢所有回答的人!我不明白getJSON和成功如何工作。是的,那是我想要的功能。再次感谢您解释得很好的答案。 :) – user1461465 2012-07-06 14:42:43

0

你不必调用“getJSON”,因为你已经拥有了你想要的东西。你需要的一切都在数据中。所以,你的“成功”的回调应该是这个样子:

function(data){ 
    var jsonData = $.parseJSON(data); 
    $.each(jsonData, function(key, val) { 

    }) 
} 
1

你的代码是打破。

$.getJSON发送另一个 AJAX调用,GET请求获取JSON文件。您已将POST请求发送至post.php,您无需再发送另一个电话。

dataType: 'json'添加到您的第一个调用中,JSON响应将为您解析。

$.ajax({ 
    type: "POST", 
    url: "post.php", 
    data: $("form#input").serialize(), 
    dataType: 'json', 
    success: function (data) { 
     $.each(data, function (key, val) { 
      // code here 
     }); 
    } 
}); 
1

你得到Invalid argument supplied for foreach,因为它预计$_POST['checkboxes']这你不是在你的$.getJSON呼叫发信值