2012-02-03 78 views
0

我向PHP文件發送以下信息。數據包含「一」和「二」。 'One'包含序列化表單,兩個包含類似的自定義信息。我怎樣才能閱讀這些post的值與PHP。我希望能夠區分一個包含的值和兩個包含的值。jquery Ajax使用php讀取post值使用php

$('form').submit(function() { 
    x = $(this).serialize(), 
    test = 'testing=whatever&something=else'; 
    $.ajax({ 
     type: 'POST', 
     data: {'one':x, 'two':test} 
     ... 
    }) 
}) 

我怎麼能以這樣的方式,我可以做

$one = $_POST['one']; 
foreach($one as $key=>$value){ $message.= $key.": ".$value."\r\n"; } 

回答

1

我不知道你想與形式的序列化版本做什麼(X)但是您可以按照慣例使用$ _POST訪問接收PHP腳本中的兩個變量,然後可能使用parse_str(http://au.php.net/manual/en/function.parse-str.php)將'test'分解爲各種參數,但我質疑爲什麼您要採用此路線打破參數並將它們作爲數據參數中的單個參數傳遞:

data: {'testing' : whatever, 'something' : else} 
+0

我有一個2陣列的目的。一個數組用作表單值,另一個數組用於其他目的。你的回答並沒有解決我的問題。 – Pinkie 2012-02-03 05:32:21

+0

parse_str是否不從字符串中提取參數給你? – Alpaus 2012-02-03 09:31:33

+0

謝謝alpaus,parse_str就是我一直在尋找的東西。它按預期工作。我只是想知道,因爲數據是一個查詢字符串,我們是否需要對它進行url編碼,使其具有特殊字符或空格。 – Pinkie 2012-02-03 20:04:41

1

閱讀在PHP中的值,你需要取消在PHP端的submit

$('form').submit(function(e) { 
    e.preventDefault(); 
    x = $(this).serialize(); 
    test = 'testing=whatever&something=else'; 
    $.ajax({ 
     type: 'POST', 
     data: {one:x, two:test} 
     ... 
    }) 
}) 

默認行爲

$one = $_POST['one']; 
$two = $_POST['two']; 

更新:

IM不是深諳PHP的,但我認爲以下應工作

$one = $_POST['one']; 
$two = $_POST['two']; 

$cols = explode("&", $one); 
foreach($cols as $col) { 
    $key_values = explode("=", $col); 
    $key = urldecode($key_values[0]); 
    $values = urldecode(key_values[1]); 
} 
echo $key, $values; 
+0

謝謝,但我怎麼能得到的名稱和值在PHP中,所以我可以做一些像'foreach($ key => $ value){ \t $ message。= $ key。「:」。$ value。「\ r \ N「; } @ – Pinkie 2012-02-03 05:29:50

+0

@Pinkie查看答案更新 – Rafay 2012-02-03 05:43:21

+0

這適用於+1,但不是一個優雅的解決方案。 parse_str是我正在尋找的。 – Pinkie 2012-02-03 20:07:22

0

如果表單包含複選框或選項框(有相同的名字輸入)使用$(本).serializeArray()而不是$(本).serialize()

0

你需要先轉換來區分它們你的表單數據轉換成JSON!而不是序列化的查詢字符串,因爲它參見This,JSON可以讓您擁有嵌套密鑰的能力。

然後你就可以把不同的鑰匙單獨的數據,JSON,如:

var myData = 
{ 
    'one': $('form').serializeObject(), 
    'two': 'testing=whatever&something=else', 
}; 

$('form').submit(function() { 
    $.ajax({ 
     type: 'POST', 
     data: myData, 
     ... 
    }); 
}); 

而在PHP端,你可以很容易地得到它使用的方式,你希望:

$one = $_POST['one'] 
foreach($one as $key=>$value) { $message.= $key.": ".$value."\r\n"; } 
+0

我怎樣才能得到我的serializeArray到這個JSON格式裏面'one'和我的其他值''裏面' – Pinkie 2012-02-03 07:35:21

+0

你不應該調用jQuery的序列化函數,而是從正確的答案複製粘貼功能從我給的鏈接我的答案,然後使用: x = $(this).serializeObject(); – BlackDivine 2012-02-03 12:10:27

+0

我也爲你更新了答案。 – BlackDivine 2012-02-03 12:13:11