回答
感谢 Kenneth 的回答和建议,我确实弄清楚了我需要做什么。有一个附加层,因为这是一个 ExpressionEngine 站点,但基本上我需要告诉函数该变量来自帖子,如下所示:
$newItems = $this->EE->input->post('newItems');
$newItems = json_decode($newItems, true);
更新
在遵循下面肯尼斯的建议之后,我能够让 javascript 识别出我正在传递r.newItems
. 但是我的 php 函数无法识别它正在接收一个数组。这是我得到的错误:
PHP Warning: Missing argument 1 for Order::addReorderToCart()
我的 php 函数如下所示:
public function addReorderToCart($newItems) {
error_log("newitems");
error_log(print_r($newItems,1)); // this is not printing anything
$_SESSION['order']['items'] = array_merge($_SESSION['order']['items'], $newItems);
$this->EE->app->addToCart();
$rtnArray['success'] = true;
}
我需要做什么来翻译通过 jquery 发送的数组,以便 php 函数将其识别为数组?
我有以下由于另一个 ajax 调用而运行的 javascript/jquery 代码:
function ohReorderAjaxReturn(data) {
console.log("ajax return");
console.dir(data);
var r = eval(data);
console.log("r");
console.dir(r);
if(data.unavailableItems instanceof Array && data.unavailableItems.length > 0) {
// there are unavailable items; ask if they want to go ahead
Modal({
title: r.errTitle,
text: r.errMsg, // need to update this to contain correct text including store address and unavailableItems
yellow_button: {
btn_text: "It's OK, continue",
action: function(r){
console.log("r inside function");
console.log(r);
// need ajax call to addReorderToCart
$.post('/site/ajax/order/addReorderToCart', {'newItems': r.newItems},
function(data) {
var ret = eval(data);
if( ret.success == 1 ) {
document.location = '/site/order_summary';
}
else {
alert("error");
}
});
}
},
black_button: {
btn_text: "Cancel"
}
});
}
else {
console.log("not an array");
// there are no unavailable items; add to cart and continue on
}
}
线内的console.log
右边if(data.unavailableItems instanceof Array && data.unavailableItems.length > 0)
让我知道它已经到了那么远。它正在弹出模式,但action
部分(通过 ajax 调用另一个 php 函数)似乎没有获取newItems
传入的值。这是 Firebug 的屏幕截图;您可以看到console.dir(r)
函数签名中的几行返回信息newItems
。r
当我尝试将其传递到帖子时,为什么会变得未定义?如果我现在做错了,我该怎么做?