正如标题所示,我试图从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
:
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,并将其解码为服务器端对象。