正如标题所示,我试图从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↵)↵[]"
答案 0 :(得分:0)
我认为&#34; pickUpDateTime&#34;嵌套在JSON字符串中,虽然我不确切知道getRequestValue方法的作用,但我不确定它是否会从该字符串中提取pickUpDateTime或其他参数。
首先需要将整个字符串传递给json_decode并将其分配给变量:
$jsonValue = json_decode($requestParams);
$pickUpDateTime = $jsonValue['pickUpDateTime'];
答案 1 :(得分:0)
您需要使用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));
答案 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并将服务器端解码为对象。