Вот некоторая документация по .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
});
Я собираюсь сделать дикое предположение и сказать, что причина, по которой он выводит "ffff", заключается в том, что $_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']);
...
Sidenote :
Если выполучил идентификатор attr в форме, почему бы не использовать: $("#profileName").submit(...)
?
Имеет смысл, если вы спросите меня.
Отладка
В зависимости от того, какой браузер вы используетеиспользуя, вы можете проверить, что XHR отправляет / получает с сервера.В Firefox вы можете использовать плагин Firebug (панель XHR находится под Net-> XHR)
Майк также упомянул отладку в Chrome:
Инструменты разработчика в 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";
}