2012-07-06 26 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呼叫發信值