在PHP中访问嵌套的Javascript对象

时间:2014-06-11 13:28:11

标签: javascript php object nested

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

3 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

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并将服务器端解码为对象。