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