【问题标题】:Access Nested Javascript Object in PHP在 PHP 中访问嵌套的 Javascript 对象
【发布时间】:2014-06-11 13:28:11
【问题描述】:

正如标题所示,我正在尝试从 PHP 中访问嵌套的 javascript 对象属性。

我的对象是这样声明的。

var requestParams = {
        apiKey: appData.apiKey,
        action: "addJob",
        name : name,
        note: note,
        dropoff: dropoffAddress,
        noOfCars: noOfCars,
        carType: carType,
        pickUpDate: pickUpDate,
        pickUpTime: pickUpTime,
        pickUpDateTime: {}
    };

pickUpDateTime(requestParams 对象的最后一个属性) 属性有一个嵌套对象,我使用 for 循环动态添加键值对。

for(var x = 0; x < dateArray.length; x++){
        var dbMoment = moment(dateArray[x] + " " + pickUpTime,appData.displayDateFormat);
        requestParams.pickUpDateTime[x] = dbMoment.format(appData.dbDateFormat);
    }

当我记录对象时,这就是我在控制台中看到的。到目前为止一切顺利。

{"apiKey":"ba6f4fc3-0f52-11e3-a51d-fefdb24fa1e7","action":"addJob","name":"Dave Manning","note":"","dropoff":"51st street","noOfCars":"1","carType":"saloon","pickUpDate":"11/06/14,13/06/14,15/06/14","pickUpTime":"14:10",******"**pickUpDateTime":{"0":"2014-06-11 14:10:00","1":"2014-06-13 14:10:00"**,**"2":"2014-06-15 14:10:00"}****,"phone":"452345657654745","pickupAddress":"popes quay","pickupLat":51.9013,"pickupLng":-8.47616,"noOfDates":3}

但是,在我将它发送到我的 PHP 脚本后,我似乎无法访问 pickUpDateTime 对象。目前我正在尝试使用下面的代码访问它。它不会工作。此外,当我包含这行代码时,该函数不会返回任何内容,因此我可以检查 $pickUpDateTime 的内容。

$pickUpDateTime = json_decode($this->getRequestValue("pickUpDateTime", true));

我可以访问所有其他属性。因此,例如,这可以正常工作。

$noOfDates = $this->getRequestValue("noOfDates", true);

我知道这可能是一个相对简单的解决方法,但我似乎无法让它发挥作用。

非常感谢任何帮助。

这是我执行 var_dump($_REQUEST) 时得到的结果

responseText: " ↵Array↵(↵    [apiKey] => ba6f4fc3-0f52-11e3-a51d-fefdb24fa1e7↵    [action] => addJob↵    [name] => dave↵    [note] => ↵    [dropoff] => blarney street↵    [noOfCars] => 1↵    [carType] => saloon↵    [pickUpDate] => 11/06/14,13/06/14,15/06/14↵    [pickUpTime] => 15:43↵    [pickUpDateTime] => Array↵        (↵            [0] => 2014-06-11 15:43:00↵            [1] => 2014-06-13 15:43:00↵            [2] => 2014-06-15 15:43:00↵        )↵↵    [phone] => 5643563456435↵    [pickupAddress] => popes↵    [pickupLat] => 51.89397↵    [pickupLng] => -8.47685↵    [noOfDates] => 3↵    [_] => 1402497974065↵)↵[]"

【问题讨论】:

  • var_dump($this-&gt;getRequestValue("pickUpDateTime", true)); 你得到了什么?
  • getRequestValue 方法有什么作用?它可能需要在那里进行更改。
  • 它和 $variable = $_POST["variable"] 做同样的事情
  • 如果您已经解码了整个字符串,pickupDateTime 将已经被解码。无需再次解码 - 只需获取值并使用它们。
  • 我已经取出了json解码,还是不行。

标签: javascript php object nested


【解决方案1】:

我认为“pickUpDateTime”嵌套在 JSON 字符串中,虽然我不知道 getRequestValue 方法的确切作用,但我不确定它是否会从该字符串中提取 pickUpDateTime 或其他参数。

您首先需要将整个字符串传递给 json_decode 并将其分配给一个变量:

$jsonValue = json_decode($requestParams);
$pickUpDateTime = $jsonValue['pickUpDateTime'];

【讨论】:

    【解决方案2】:

    您需要使用 JSON.stringify 将该数据作为 json 字符串发送:

    var data = [];
    
    for(var x = 0; x < dateArray.length; x++){
            var dbMoment = moment(dateArray[x] + " " + pickUpTime,appData.displayDateFormat);
            data[x] = dbMoment.format(appData.dbDateFormat);
        }
    
    var jsonString = JSON.stringify(data);
    
    var requestParams = {
            apiKey: appData.apiKey,
            action: "addJob",
            name : name,
            note: note,
            dropoff: dropoffAddress,
            noOfCars: noOfCars,
            carType: carType,
            pickUpDate: pickUpDate,
            pickUpTime: pickUpTime,
            pickUpDateTime: jsonString
        };
    
    //php
    $pickUpDateTime = json_decode($this->getRequestValue("pickUpDateTime", true));
    

    【讨论】:

    • 请详细说明“没有工作”。后端的请求对象是什么样的?它是否包含一个名为pickUpDateTime 的属性?您是否遇到 js 错误,或者问题完全出在后端?实际的 http 请求是什么样的(使用 fiddler、firebug、chrome 开发工具或类似工具检查)
    • 当我完成控制台日志时,我得到了 pickUpDateTime":"[\"2014-06-11 14:56:00\",\"2014-06-13 14:56:00\" ]"
    • 好的,那么从端开始就好了,后端的请求是什么样的?
    • 我已经在上面发布了 $_REQUEST 转储。当我在解码 json 后执行 var_dump 时,我得到一个空值。
    【解决方案3】:

    如果 getRequestValue 方法只是获取 POST 值,那么您不会发布 JSON。您正在像表单帖子一样发送到服务器。

    在JS中将pickUpDateTime声明为数组而不是对象;

    var requestParams = {
            apiKey: appData.apiKey,
            action: "addJob",
            name : name,
            note: note,
            dropoff: dropoffAddress,
            noOfCars: noOfCars,
            carType: carType,
            pickUpDate: pickUpDate,
            pickUpTime: pickUpTime,
            pickUpDateTime: []
        };
    

    如果您的 JS 库足够聪明,它会将 pickUpDateTime 作为数组发布。如果不是,您最好的解决方案是将 JSON 数据作为 JSON 数据发布到 PHP 并将其在服务器端解码为一个对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-27
      • 1970-01-01
      • 2012-11-25
      • 2013-08-13
      • 1970-01-01
      • 2018-11-24
      • 2020-08-17
      • 1970-01-01
      相关资源
      最近更新 更多