答え
Kenneth の回答と提案のおかげで、何をする必要があるかがわかりました。これは ExpressionEngine サイトであるため、レイヤーが追加されていますが、基本的には、次のように、変数がポストから入ってくることを関数に伝える必要がありました。
$newItems = $this->EE->input->post('newItems');
$newItems = json_decode($newItems, true);
更新しました
以下の Kenneth の提案に従った後、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;
}
php関数が配列として認識できるように、jqueryを介して送信されている配列を変換するにはどうすればよいですか?
別の 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
投稿に渡そうとすると未定義になるのはなぜですか? そして、今やっていることが間違っているとしたら、どうすればよいでしょうか?