如何调整AJAX请求?解决点击触发后请求重复发送的问题
修复AJAX请求重复发送的问题
看了你的代码,核心问题出在重复绑定点击事件上,再加上冗余的嵌套结构,导致每次点击按钮都会触发N次AJAX请求(N等于你的数组长度)。我来帮你拆解问题并给出修复方案:
问题根源
- 你在
$.each(array, function(i) { ... })循环内部,又嵌套了$(document).ready(),还重复绑定了$("#jsonp2").click()事件——这意味着数组有多少项,就会给按钮绑定多少个点击处理器,点击一次自然会发多次请求。 - 外层已经有
$(document).ready()了,完全不需要内层再嵌套。 $val = $('#d').html()是页面加载时就获取的,不是点击按钮时的实时值,这可能也不符合你的预期。
修复方案
方案1:批量处理数组项(点击一次遍历所有项发请求)
把点击事件绑定移到循环外面,只绑定一次,在点击事件内部再遍历数组执行AJAX:
$(document).ready(function () { // 只给按钮绑定一次点击事件 $("#jsonp2").click(function () { // 点击时才获取最新的#d内容 var val = $('#d').html(); var number = val; var array = $('#test').val().split("\n"); // 遍历数组执行AJAX请求 $.each(array, function (i) { var ok = array[number]; var arr = ok.split(":"); var username = arr[0]; var password = arr[1]; $.ajax({ url: "http://linux-app.tv:8080/player_api.php?username=" + username + "&password=" + password + "&type=m3u", success: function (response) { var data = response.user_info; if (data.status.match("Active")) { $(".aprovadas").append("Username:" + data.username + "\npassword:" + data.password + "\nstatus:" + data.status + "\n"); } } }); }); }); });
方案2:单次处理指定项(点击一次只发一次请求)
如果你的需求是点击一次只处理数组中某个指定索引的项,那可以去掉循环,直接定位到目标项:
$(document).ready(function () { $("#jsonp2").click(function () { // 转为数字确保是有效索引 var number = parseInt($('#d').html(), 10); var array = $('#test').val().split("\n"); // 先检查索引是否有效,避免报错 if (number >= 0 && number < array.length) { var ok = array[number]; var arr = ok.split(":"); var username = arr[0]; var password = arr[1]; $.ajax({ url: "http://linux-app.tv:8080/player_api.php?username=" + username + "&password=" + password + "&type=m3u", success: function (response) { var data = response.user_info; if (data.status.match("Active")) { $(".aprovadas").append("Username:" + data.username + "\npassword:" + data.password + "\nstatus:" + data.status + "\n"); } } }); } }); });
内容的提问来源于stack exchange,提问作者cinassa
相关产品推荐
相关产品推荐

