這裏的一些文檔.serialize()
你基本上序列化它兩次。
var updateName = $(this).serialize(); //f_name=somename&m_name=some
$.ajax({
...
data: {updateName: updateName} //{updateName: 'somename&m_name=some'}
//which is translated into updateName=f_name%3dsomename%26m_name%3dsome
});
我要帶胡亂猜測,並說,這是輸出的原因「F F F F」是因爲$_POST['updateName']
現在是一個字符串。 PHP中的每個單獨字符都可以像這樣訪問$string[n]
。我猜想它將空白解釋爲0,並給出第一個字符,實際上是「f」。
下面是它看起來應該像:
$("form#profileName").submit(function(){
var updateName = $(this).serialize();
$.post("update.php",updateName,function(data){
alert(data);
});
return false;
});
或,在我看來,美麗,清潔的方式,
$("form#profileName").submit(function(){
var updateName = $(this).serialize();
$.ajax({
url: "update.php",
type: "POST",
data: updateName,
success: function(msg){
alert(data);
}
});
return false;
});
而且PHP $_POST
變量現在有幾個值,它們是這樣訪問的:
$_POST['f_name']
$_POST['m_name']
...
另請注意,在PHP腳本中,您可能必須在變量上使用urldecode()
或rawurldecode()
,具體取決於您在JS(encodeURI()
或encodeURIComponent()
)中發送數據的方式。
在這種情況下,serialize()
有它自己的內部encodeURI(),所以不需要它,但PHP可能需要解碼它。 如果你仍然有你固定2xSerialize後的問題,只是改變了PHP腳本來解碼編碼數據:
$fname = urldecode($_POST['f_name']);
$mname = urldecode($_POST['m_name']);
...
旁註:
如果你有一個ID ATTR上表格,爲什麼不使用:$("#profileName").submit(...)
?
如果你問我,會更有意義。
調試
取決於你使用的是什麼瀏覽器,你可以查閱一下XHR被髮送到/從服務器recieving。在Firefox中,你可以使用一個叫做Firebug插件(XHR面板是NET-下> XHR)
麥克還提到調試在Chrome:
開發工具,瀏覽器 - >網絡 - > XHR底部
最終解決
的解決方案現在應該是這個樣子:
的Javascript:
$("form#profileName").submit(function(){
var updateName = $(this).serialize();
$.ajax({
url: "update.php",
type: "POST",
data: updateName,
success: function(msg){
alert(data);
}
});
return false;
});
PHP腳本「update.php」:
if(isset($_POST)){
$fname = $_POST['f_name']; //urldecode($_POST['f_name']);
$mname = $_POST['m_name']; //urldecode($_POST['m_name']);
$lname = $_POST['l_name']; //urldecode($_POST['l_name']);
$altname = $_POST['alt_nam']; //urldecode($_POST['alt_nam']);
echo "$fname $mname $lname $altname";
}
使用類似fiddler 2的東西並捕獲http請求並查看正在發送的內容。應該有助於確定HTML表單或代碼中是否有錯誤。沒有形式和要求,很難確定問題出在哪裏。 – 2011-12-26 21:57:20
或'console.log(updateName)'在'$ .post'之前' – babonk 2011-12-26 21:59:15
我只需提醒(updateName),我就可以得到正確的值。 f_name = fsdaf&m_name =&l_name =&alt_nam =,如果我不添加任何值 – hellomello 2011-12-26 22:02:52