首页 > 解决方案 > 为什么在这段代码的 $('selector').delegate() 方法中不能调用 $.ajax() 方法

问题描述

我正在寻找一种方法来选择我们使用 JS 由 PHP 回显的元素。我发现有一种方法可以使用“delegate()”。所以,在这里我试图选择被点击的元素,然后从数据库中检索与它对应的详细信息。

控制台打印“错误!”

有什么我想念的吗。我还在学习 jQuery。还有其他方法可以做我想做的事情吗?

注意:同样由于某种原因,此脚本在外部 JS 文件中不起作用。

这是我写的脚本

   $("body").delegate( "li.allfriends", "click", function() {

        var friend = $(this).html();
        var username = "<?php echo $_SESSION['user'] ?>";

        var data = { 'action': 'showExpenses', 'username': username, 'friend': friend };
        $.ajax({
            url: 'ajax.php',
            dataType: 'json',
            data: data,
            method: 'POST',
            success: function (data) {
                console.log('Success!');
                console.log(data);
            }, 
            error: function (error) {
                console.log('Error!');
            }
        });
    });

这是我正在处理它的地方

if($_POST['action'] == 'showExpenses') {
    $username = $_POST['username'];
    $friend = $_POST['friend'];

    $rows = $misc->showExpensesForSelectedFriend($username, $friend); 
    return json_encode($result); 
}

这是我检索数据的最后一个函数

public function showExpensesForSelectedFriend($username, $friend) {
    $username = $this->sql->escape($username);
    $friend = $this->sql->escape($friend);

    $rows1 = $this->sql->getDatas('expense', 'paidBy', $username, 'owedBy', $friend);
    $rows2 = $this->sql->getDatas('expense', 'paidBy', $friend, 'owedBy', $username);
    foreach($rows2 as &$item) {
        array_push($rows1, $item);
    }
    return $rows1;
}

控制台打印错误!,后来我检查了 showExpensesForSelectedFriend() 工作正常。

标签: javascriptphpjqueryajax

解决方案


也许这应该是你的问题。json_encode($result);试着把这个变量变成array这样。

if($_POST['action'] == 'showExpenses') {
    $username = $_POST['username'];
    $friend = $_POST['friend'];
    $rows = $misc->showExpensesForSelectedFriend($username, $friend);
    $result = array();
    if(count($rows) == 0) {
        $result['status'] = 0;
    } 
    return json_encode($result); 
}

您可以将返回值称为data.status.

   $.ajax({
            url: 'ajax.php',
            dataType: 'json',
            data: data,
            method: 'POST',
            success: function (data) {
                console.log('Success!');
                console.log(data.status);
            }, 
            error: function (error) {
                console.log('Error!');
            }
        });

推荐阅读