2013-04-28 7 views
0

Я пытаюсь добавить элементы к моему уже определен JS объект:JavaScript литерал объекта добавление

var updateInfo = { 
    called: 'UPDATEINFO', 
    acct: [insert_php]echo $_SESSION['clientAcc'];[/insert_php] 
}; 

А потом в какой-то AJAX я назвал это:

updateInfo.push = ({ 
     fname: encodeURIComponent(toTitleCase($("#FName").val())), 
     lname: encodeURIComponent(toTitleCase($("#LName").val())), 
     address1: encodeURIComponent(toTitleCase($("#address1").val())), 
     address2: encodeURIComponent(toTitleCase($("#address2").val())), 
     city: encodeURIComponent(toTitleCase($("#city").val())), 
     state: encodeURIComponent($("#state").val()), 
     zip: encodeURIComponent($("#zip").val()), 
     email: encodeURIComponent($("#email").val()), 
     phone: encodeURIComponent($("#phone").val()) 
}); 

console.log(updateInfo); 

$.ajax({ 
    type: "POST", 
    url: "../form/master.php", 
    data: updateInfo, 
    dataType: "html", 
    success: function (data, responseText, textStatus) { 
     ect ect.... 

Данные выглядит следующим образом для объекта JS:

enter image description here

Итак, я знаю, что у него есть данные в объекте JS.

Однако, похоже, он не отправляет эту информацию на мою страницу PHP, на которую звонит ajax?

if ($called == 'UPDATEINFO') { 
    $fname  = urldecode($_POST['fname']); 
    $lname  = urldecode($_POST['lname']); 
    $address1 = urldecode($_POST['address1']); 
    $address2 = urldecode($_POST['address2']); 
    $city  = urldecode($_POST['city']); 
    $state  = urldecode($_POST['state']); 
    $zip  = urldecode($_POST['zip']); 
    $email  = urldecode($_POST['email']); 
    $phone  = urldecode($_POST['phone']); 

echo 'debug> ' . $fname; 

я получаю отладки> и ничего.

Что я делаю неправильно?

ответ

0

Вложенные два объекта, которые не являются стандартными для x-www-url-formencoded передачи данных со страниц на серверы.

Вам необходимо вместо слить два объекта. Как вы уже JQuery это тривиальное с $.extend() методом:

$.extend(updateInfo, { 
    fname: toTitleCase($("#FName").val()), 
    ... 
}); 

В противном случае:

var extra = { 
    fname: toTitleCase($("#FName").val()), 
    ... 
} 

for (var key in extra) { 
    if (extra.hasOwnProperty(key)) { 
     updateInfo[key] = extra[key]; 
    } 
} 

NB: это ненужно вручную URL кодирования и декодирования поля - метод $.ajax() будет URL закодировать поле формы автоматически.

+0

Где бы я поместил этот метод ** $. Extend ** в мой вызов ajax? – StealthRT

+0

, вы должны использовать этот _before_ вызов AJAX, заменив строку, которую вы используете, которая говорит 'updateInfo.push = {...}' – Alnitak

+0

Sweet! Ты понял. Спасибо за помощь, Алнитак. – StealthRT

0

это не должно быть

$_POST['push']['fname'] 

?

Иначе оставьте print_r($_POST), чтобы увидеть, где находятся ваши данные.

Смежные вопросы