使用Ajax+JSON实现用户名查重功能遇问题求助
问题分析与解决方案
你遇到的问题主要出在**$.each的使用方式和匹配逻辑的顺序**上,我来帮你一步步修正:
核心问题点
$.each参数理解错误:
你的JSON数组里每个元素是一个对象(比如{"korisnicko_ime":"darbranis"}),所以$.each遍历的时候,回调函数的第一个参数是数组索引,第二个参数是当前的用户对象,而不是你写的korisnicko_ime和value。你当前的value其实是整个对象,和输入的kor_ime字符串永远不会相等,这是判断失效的关键原因。提示更新逻辑错误:
你在循环里每遍历一个用户就更新提示,哪怕前面已经找到匹配的用户,后面不匹配的用户会把提示又改成“不存在”——最终只要最后一个用户不匹配,就会显示错误提示。
修正后的代码
$("#k_ime").on('focusout', function() { var kor_ime = $(this).val(); // 先初始化标记,默认用户名不存在 var postoji = false; $.ajax({ url: 'http://barka.foi.hr/WebDiP/2017_projekti/WebDiP2017x021/popis_korisnika.php', type: 'GET', dataType: 'json', success: function (json) { // 遍历JSON数组里的每个用户对象 $.each(json, function (index, korisnik) { // 取对象里的korisnicko_ime属性和输入值比较 if (korisnik.korisnicko_ime === kor_ime) { postoji = true; return false; // 找到匹配项后跳出循环,不用继续遍历 } }); // 遍历结束后根据标记显示提示 if (postoji) { $("#poruke").text("Korisnik postoji!").show(); $("#greske").hide(); console.log("Korisnik postoji!"); } else { $("#greske").text("Korisnik ne postoji!").show(); $("#poruke").hide(); console.log("Korisnik ne postoji"); } console.log(kor_ime); }, // 补充错误处理,排查请求失败的情况 error: function(xhr, status, error) { $("#greske").text("Greška prilikom provjere korisnika!").show(); console.log("AJAX greška: " + error); } }); });
关键修改说明
- 补上了
focusout事件的绑定逻辑(你之前的代码没写这部分,确保触发逻辑正确)。 - 新增
postoji标记变量,先默认用户名不存在,遍历中找到匹配项就把标记设为true并跳出循环,避免多余遍历。 - 遍历的时候正确获取用户对象的
korisnicko_ime属性进行比较,修正了之前的参数错误。 - 把提示更新放在遍历结束后,彻底解决了“匹配项被后续不匹配项覆盖提示”的问题。
- 增加了AJAX错误处理,方便排查请求失败的情况(比如跨域、文件路径错误等)。
- 用
show()和hide()控制提示元素的显示,避免两个提示同时出现。
这样修改后,就能正确判断用户名是否存在了~
内容的提问来源于stack exchange,提问作者Darko Darac
相关产品推荐
相关产品推荐

