在PHP中访问嵌套Javascript对象


Access Nested Javascript Object in PHP

正如标题所示,我试图从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↵)↵[]"

我认为"pickUpDateTime"嵌套在JSON字符串中,虽然我不知道getRequestValue方法到底是什么,我不确定它是否会从这个字符串中拉取pickUpDateTime或其他参数。

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

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

您需要使用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));

如果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数据发布到PHP,并将其解码为服务器端对象。