显示奇怪的Jquery错误

时间:2015-11-02 05:43:39

标签: php jquery yii2

我的控制器代码是

public function actionStl_getchildren()
    {

        $sql    = "SELECT parent.id AS account, ifnull( ABS( SUM(gle.debit)-SUM(gle.credit) ), 0 ) AS balance,
            parent.group_or_ledger, parent.lft 
            FROM tabAccount AS parent, tabAccount AS node
            LEFT JOIN `tabGLEntry` gle ON ( gle.account = node.id )
            WHERE (node.lft BETWEEN parent.lft AND parent.rgt) and parent.parent_account='{$_POST['parent']}' 
            AND parent.is_deleted=0
            GROUP BY parent.id
            ORDER BY parent.id";
        $result = Yii::$app->db->createCommand( $sql )->queryAll();

        foreach ( $result as $id => $r )
        {
            $result[ $id ][ 'balance' ] =  $r[ 'balance' ];
        }

        echo json_encode( [ 'accounts' => $result ] );
    }

我的观点(仅相关代码)

function loadChildren($this)
        {
            var tl = $this;
            tl.find('.fa').toggleClass('fa-folder');
            var ul = tl.parent().find('ul:first');
            if (ul.children().length == 0)
            {
                ul.html("Loading...");
                tl.find('.fa').toggleClass('fa-spinner fa-spin');
                var parent = tl.find('.tree-label').text(); alert(parent);
                $.post("<?php echo  Yii::$app->request->getbaseUrl(); ?>/index.php?r=accounts/stl_getchildren", {
                        parent: parent
                    },
                    function (data)
                    {
                        var data = $.parseJSON(data);
                        var toolbar_g = '<span class="tree-node-toolbar"><a class="tree-toolbar-item">Add Child</a><a class="tree-toolbar-item">View Ledger</a><a class="tree-toolbar-item">Rename</a><a class="tree-toolbar-item delete-btn">Delete</a></span>';
                        var toolbar_l = '<span class="tree-node-toolbar"><a class="tree-toolbar-item">View Ledger</a><a class="tree-toolbar-item">Rename</a><a class="tree-toolbar-item delete-btn">Delete</a></span>';
                        ul.html("");

当我运行代码时,我得到的错误是POST http://localhost/~user/church/backend/web/index.php?r=accounts/stl_getchildren 400(错误请求)未定义的索引:parent 当我在视图中警告var父级时它显示了值但它没有传递给视图。任何想法?

2 个答案:

答案 0 :(得分:0)

您使用parent作为值和POST键,但您已将其定义为var,则POST键不包含名称parent。 (父未定义索引) 试试这种方式

            var parent_value = tl.find('.tree-label').text(); 
            alert(parent_value);
            $.post("<?php echo  Yii::$app->request->baseUrl; ?>/index.php?r=accounts/stl_getchildren", {
                    parent: parent_value
                }

我通常使用Yii :: $ app-&gt; request-&gt; baseUrl而不是getBaseUrl()函数

在控制器中尝试这种方式为$ sql

$sql    = "SELECT parent.id AS account, ifnull( ABS( SUM(gle.debit)-SUM(gle.credit) ), 0 ) AS balance,
            parent.group_or_ledger, parent.lft 
            FROM tabAccount AS parent, tabAccount AS node
            LEFT JOIN `tabGLEntry` gle ON ( gle.account = node.id )
            WHERE (node.lft BETWEEN parent.lft AND parent.rgt) 
            AND parent.parent_account = " . $_POST['parent'] . "   
            AND parent.is_deleted=0
            GROUP BY parent.id
            ORDER BY parent.id";

最终尝试使用var_dump($ _POST ['parent'])或var_dump($ _POST)来查看内容。 另一个使用$ _POST的提示是一个糟糕的实践..使用load()...

答案 1 :(得分:-1)

错误是由于csrfvalidation造成的。我禁用了它。 在视野中

 function loadChildren($this)
                {
                    var tl = $this;
                    tl.find('.fa').toggleClass('fa-folder');
                    var ul = tl.parent().find('ul:first');
                    if (ul.children().length == 0)
                    {
                        ul.html("Loading...");
                        tl.find('.fa').toggleClass('fa-spinner fa-spin');
                        var parent = tl.find('.tree-label').text(); alert(parent);
                        $.post("<?php echo  Yii::$app->request->getbaseUrl(); ?>/index.php?r=accounts/stl_getchildren", {
                                parent: parent,
                                _csrf : csrfToken
                            },
                            function (data)
                            {
                                var data = $.parseJSON(data);
                                var toolbar_g = '<span class="tree-node-toolbar"><a class="tree-toolbar-item">Add Child</a><a class="tree-toolbar-item">View Ledger</a><a class="tree-toolbar-item">Rename</a><a class="tree-toolbar-item delete-btn">Delete</a></span>';
                                var toolbar_l = '<span class="tree-node-toolbar"><a class="tree-toolbar-item">View Ledger</a><a class="tree-toolbar-item">Rename</a><a class="tree-toolbar-item delete-btn">Delete</a></span>';
                                ul.html("");
控制器中的

$this->enableCsrfValidation = false;

现在它运作得很好。对不起我迟到的回复