我的控制器代码是
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父级时它显示了值但它没有传递给视图。任何想法?
答案 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;
现在它运作得很好。对不起我迟到的回复