【问题标题】:JavaScript object literal additionJavaScript 对象字面量添加
【发布时间】:2013-04-22 08:53:49
【问题描述】:

我正在尝试将项目添加到我已经定义的 JS 对象中:

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 对象的数据如下所示:

所以我知道它确实在 JS 对象中有数据。

但是,它似乎没有将该信息发送到我的 ajax 正在调用的 PHP 页面?

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;

我得到 debug> 却什么也没有。

我做错了什么?

【问题讨论】:

    标签: php javascript ajax javascript-objects


    【解决方案1】:

    不应该

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

    ?

    否则请删除print_r($_POST) 以查看您的数据在哪里。

    【讨论】:

      【解决方案2】:

      您已经嵌套了两个对象,这对于 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];
          }
      }
      

      注意:无需手动对字段进行 URL 编码和解码 - $.ajax() 方法会自动对字段形式进行 URL 编码。

      【讨论】:

      • 在我的 ajax 调用中该 $.extend 方法应该放在哪里?
      • 您将在 AJAX 调用之前使用它,替换您拥有的 updateInfo.push = { ... }
      • 甜蜜!你说对了。感谢您的帮助,Alnitak。
      猜你喜欢
      • 1970-01-01
      • 2014-02-26
      • 2016-11-02
      • 2017-12-08
      • 1970-01-01
      • 2010-11-09
      • 2016-05-15
      • 2013-02-22
      • 1970-01-01
      相关资源
      最近更新 更多