1

回答

感谢 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)函数签名中的几行返回信息newItemsr当我尝试将其传递到帖子时,为什么会变得未定义?如果我现在做错了,我该怎么做?

在此处输入图像描述

4

1 回答 1

1

那是因为您将其定义r为函数的参数,并且在调用该函数时它没有传递值,因此该参数隐藏了对外部变量的访问。您应该删除参数,然后您的外部变量将再次在函数内可见:

** snip **
yellow_button: {
                btn_text: "It's OK, continue",
                action: function(){   // removed r as a parameter
                    console.log("r inside function");
                    console.log(r);
** snip **
于 2013-05-22T17:42:57.603 回答