Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么在这段代码中不能在$('selector').delegate()方法内调用$.ajax()方法_Javascript_Php_Jquery_Ajax - Fatal编程技术网

Javascript 为什么在这段代码中不能在$('selector').delegate()方法内调用$.ajax()方法

Javascript 为什么在这段代码中不能在$('selector').delegate()方法内调用$.ajax()方法,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我正在寻找一种方法来选择PHP使用JS响应的元素。 我发现有一种方法是使用委托。因此,这里我试图选择单击的元素,然后从数据库中检索与之对应的详细信息 控制台打印错误 有什么东西我遗漏了吗。我还在学习jQuery。有没有其他方法来做我想做的事情 注意:由于某些原因,此脚本在外部JS文件中不起作用 这是我写的剧本 $("body").delegate( "li.allfriends", "click", function() { var friend = $(this).ht

我正在寻找一种方法来选择PHP使用JS响应的元素。 我发现有一种方法是使用委托。因此,这里我试图选择单击的元素,然后从数据库中检索与之对应的详细信息

控制台打印错误

有什么东西我遗漏了吗。我还在学习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!');
            }
        });
    });
这是我检索数据的最后一个函数

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;
}

控制台打印错误!,后来我检查了所选朋友的ShowExpenses是否正常工作

也许这应该是你的问题。json_encode$result;尝试将此变量设置为这样的数组

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); 
}
您可以调用返回值this data.status


代码有什么问题?有错误吗?请求是否发出,或者是否有响应?您使用的是哪个jQuery版本?由于jQuery 1.7.delegate已被弃用,而.on已取代它。你真的需要更多的关于你为什么认为它不起作用的错误的信息。Devtools控制台应该显示错误或成功!还是错误!日志您没有提供任何信息,甚至不知道从哪里开始查找。请检查“网络”选项卡,当ajax调用触发时,它应该会命中服务器。如果返回一个状态代码500,那么您的PHP正在崩溃。您需要进一步调试,并在PHP中打开更多错误报告,以查找。@CertainPerformance我运行了它,控制台打印了错误!这使得行的成功匹配返回空对象,而不将任何状态设置为1。顺便说一句,在PHP中,使用$result['status']=1的第一个key=value初始化数组变量是非常好的;您不必执行$result=array;首先,尽管在使用$result之前清除$result很好。谢谢@creditablehat,但结果是一样的。但是我发现了错误。它终于奏效了。返回json_编码部分时出错。它应该是echo json_enode
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); 
}
   $.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!');
            }
        });