javascript - 从元素 OnClick 函数调用 AJAX
问题描述
第一次在这里发帖,更多的是一个潜伏者,发现很多答案非常有帮助。我无法弄清楚我的代码,所以寻找知道他们在做什么的专家!
我有 HTML(通过创建PHP
),其中有一个系列中的棒球卡列表。我正在使用 Font Awesome 来显示一个复选框。当我单击复选框时,我想调用 AJAX 来更新数据库(它会添加一张卡片或从清单中删除这张卡片)。
我回收了一些之前的代码,这些代码确实可以工作,并且我确实在一年前编写了它,但它是通过表单提交按钮调用的。下面的代码略有不同,因为我想要调用相同的函数,但如果系列中有数百张卡片,我可能会有数百个复选框。Font Awesome 复选框上的“点击”功能会将系列名称和卡号作为变量传递给清单功能。
最后,当我收到来自 AJAX 的成功响应时,我会使用 id 元素将类更新为带检查或不检查的复选框(如果它们从清单中添加或删除)
HTML 示例如下。第一部分是我正在使用的,但复选框不会显示,因为这里没有 Font Awesome 库。第二部分以防有人想运行它
<p>The code I'm using with Font Awesome (but won't show checkbox)</p>
<p>Series, #1<i class="fa fa-check-square-o" onclick="checklist('Series','1')" id="Series_1"></i></p>
<p>Series, #2<i class="fa fa-check-square-o" onclick="checklist('Series','2')" id="Series_2"></i></p>
<p>Series, #3<i class="fa fa-check-square-o" onclick="checklist('Series','3')" id="Series_3"></i></p>
<p>Series, #4<i class="fa fa-check-square-o" onclick="checklist('Series','4')" id="Series_4"></i></p>
<p>Series, #5<i class="fa fa-check-square-o" onclick="checklist('Series','5')" id="Series_5"></i></p>
<p>This might display better</p>
<p onclick="checklist('Series','1')">Series, #1</p>
<p onclick="checklist('Series','2')">Series, #2</p>
<p onclick="checklist('Series','3')">Series, #3</p>
<p onclick="checklist('Series','4')">Series, #4</p>
<p onclick="checklist('Series','5')">Series, #5</p>
下面是应该工作的 JavaScript。我的 updateChecklistTest.php 目前的代码很少,它应该返回 data.success = FALSE (用于测试目的)。问题是它直接进入 .fail 函数,所以我收到警报“这是故障区”。
同样为了测试,我有警报告诉我传递给函数的序列号和卡号,并且确实有效,因此它适当地传递了变量。
function checklist(s, c) {
alert("Series: " + s + ", Cardnumber: " + c); // THIS DOES WORK!
var formData = {
series: s,
cardnum: c
};
$.ajax({
type: 'POST',
url: 'updateChecklistTest.php',
data: formData,
dataType: 'json',
encode: true
})
.done(function(data) {
if (!data.success) {
alert(data.errors.message);
} else {
// ALL GOOD!
alert('we are good');
}
})
.fail(function(data) {
alert('this is failure zone'); // This code ends up here
alert(data.errors.message);
});
}
如果这有帮助,这是我的 PHP 代码,试图强制出错
$errors = array(); // array to hold validation errors
$data = array(); // array to pass back data
$series = $_POST['series'];
$cardnum = $_POST['cardnum'];
$errors['message'] .= $series."\n";
$errors['message'] .= $cardnum."\n";
$errors['message'] = "Here are the following errors IN THE GOOD FIELD:\n".$errors['message'];
// if there are items in our errors array, return those errors
$data['success'] = false;
$data['errors'] = $errors;
// return all our data to an AJAX call
echo json_encode($data);
我觉得解决方案类似于这里的解决方案:OnClick Send To Ajax 但是,我需要这个功能来运行列表中的1张或多张卡,只区分系列和卡号。
任何帮助是极大的赞赏。经过几个小时的搜索,我的眼睛受伤了!
已解决的问题 (对于那些认为有帮助的人)
AlwaysHelping 的响应帮助清理了 AJAX 代码,我仍然可以在 Font Awesome 标记中使用我的 OnClick 功能。因此,这是获取 AJAX 设置的一个很好的参考。
该页面是动态创建的,我认为这会导致问题。Firefox console.log 有此消息:“跨域请求被阻止:同源策略不允许读取 xxxxxx/updateChecklistTest.php 处的远程资源。(原因:CORS 标头 'Access-Control-Allow-Origin' 缺失)。”
在查看了 Firefox 描述后,我在 Stack Overflow 上找到了这个解决方案:htaccess Access-Control-Allow-Origin
将该文本添加到我的 .htaccess 文件中解决了这个问题,我现在可以在我的 AJAX 调用中看到成功/错误的数据,所以,我现在很高兴!
解决方案
您PHP
的文件正在抛出error
,因为$errors['message']
已定义multiple
时间。您可以将错误保存message
在变量中,用于$errors['message']
.
也不要使用ajax
withfail
或done
简单地使用success
和error
函数来解决determine
问题。您可以使用与上面发布的内容相同HTML
的内容HTML
。
你的决赛code
应该是这样的:
jQuery
function checklist(s, c) {
var formData = {
series: s,
cardnum: c
};
$.ajax({
type: 'POST',
url: 'file.php',
data: formData,
dataType: 'json',
success: function(data) {
if (!data.success) {
console.log(data.errors.message);
} else {
// ALL GOOD!
console.log('we are good');
}
},
error: function() {
console.log('this is failure zone'); // This code ends up here
console.log(data.errors.message);
}
})
}
PHP
<?php
$errors = array(); // array to hold validation errors
$data = array(); // array to pass back data
$series = $_POST['series'];
$cardnum = $_POST['cardnum'];
$myData = $series."\n".$cardnum;
$errors['message'] = "Here are the following errors IN THE GOOD FIELD:\n".$myData;
// // if there are items in our errors array, return those errors
$data['success'] = false;
$data['errors'] = $errors;
// return all our data to an AJAX call
echo json_encode($data);
?>
推荐阅读
- python - Pytorch:如何通过python字典中的张量(键)访问张量(值)
- playframework - 如何在根项目的子项目上使用命令“dist”?
- google-chrome - 哪些 Accept-CH 值等同于 User-Agent 来识别浏览器?
- angular - 无法在 highcharts 中显示条形的最小高度
- android - 自定义视图添加到 WindowManager,根据状态将事件传递给底层窗口
- javascript - 使用 XHR 的结果重新填充 DataTables 表
- powerbi - 无法获得区域计数的百分比
- python - 需要帮助理解 PyQt5 中的继承
- python - 多次计算DF中每个项目的两点之间的距离
- ios - 自动调整 UICollectionView 单元格大小,将单元格对齐到顶部