如何让Javascript/Jquery/AJAX等待代码执行
我的html模板中有这段代码。它检查用户输入的学校名称与学校在我的数据库中关联的唯一ID $id\u school.changefunction{ var school=$this.val; var identification\u code=document.getElementById'id\u identification\u code' 如果识别码!=和学校!={ $.ajax{ url:“/checks/validate_school/”, 数据:{ “学校”:学校, }, 数据类型:“json”, 成功:functiondata{ 控制台。日志“检查学校” 如果data.code!=识别码{ console.logdata.code; document.getElementById'id_school'.style.borderColor='red'; document.getElementById'id_identification_code'.style.borderColor='red'; }否则{ document.getElementById'id_school'.style.borderColor='green'; document.getElementById'id_identification_code'.style.borderColor='green'; } } }; } }; 这里的标识代码不是文本而是html元素,它永远不会是文本 您应该在此处使用逻辑And运算符&&D:如何让Javascript/Jquery/AJAX等待代码执行,javascript,jquery,ajax,forms,Javascript,Jquery,Ajax,Forms,我的html模板中有这段代码。它检查用户输入的学校名称与学校在我的数据库中关联的唯一ID $id\u school.changefunction{ var school=$this.val; var identification\u code=document.getElementById'id\u identification\u code' 如果识别码!=和学校!={ $.ajax{ url:“/checks/validate_school/”, 数据:{ “学校”:学校, }, 数据类型
if(identification_code != '' and school != '')
您应该使用identification_code.value,因为它是DOM元素
if(identification_code.value != '' && school != ''){
......
}
您可以在jQuery中使用jQuery.Deferred进行顺序执行
var deferred = jQuery.Deferred();
或
一旦创建,延迟对象就会公开几个方法。忽略已弃用或已删除的,它们是:
alwayscallbacks[,回调,…,回调]:添加在解析或拒绝延迟对象时要调用的处理程序
donecallbacks[,callbacks,…,callbacks]:添加要处理的处理程序
解析延迟对象时调用
failcallbacks[,callbacks,…,callbacks]:添加要处理的处理程序
当拒绝延迟对象时调用。
notify[参数,…,参数]:调用
具有给定参数的延迟对象。
notifyWithcontext[,参数,…,参数]:调用
对具有给定上下文和
论据。
progresscallbacks[,callbacks,…,callbacks]:添加要处理的处理程序
当延迟对象生成进度通知时调用。
promise[目标]:返回延迟的promise对象。
拒绝[参数,…,参数]:拒绝延迟对象并使用给定参数调用任何failCallbacks。
rejectWithcontext[,参数,…,参数]:拒绝延迟
对象并调用具有给定上下文和
论据。
resolve[参数,…,参数]:解析延迟对象并使用给定参数调用任何doneCallbacks。
resolveWithcontext[,参数,…,参数]:解析延迟
对象并调用具有给定上下文和
论据。
状态:确定延迟对象的当前状态。
然后ResolvedCallback[,rejectedCallback[,progressCallback]]:添加
解析、拒绝延迟对象时要调用的处理程序,
或者仍在进行中。
好的,所以我设法解决了我的问题。我没有查看“学校名称”字段,而是查看了“标识码”字段,仅在填写此字段时运行代码。这是我的新代码:
$('#id_identification_code').blur(function(){
var school_code = $(this).val();
var school_name = document.getElementById('id_school').value;
$.ajax(
{
url: '/checks/validate_school/',
data: {
'name':school_name,
},
dataType: 'json',
success: function(data){
if(data.code == school_code){
console.log('Codes Match')
document.getElementById('id_school').style.borderColor='green';
document.getElementById('id_identification_code').style.borderColor='green';
}else{
console.log('Codes do not match')
document.getElementById('id_school').style.borderColor='red';
document.getElementById('id_identification_code').style.borderColor='red';
}
}
}
)
})
您在id\u identification\u code Selector if identification\u code!=还有学校{First identification_code是一个DOM元素对象,因此永远不会相等。可能您的意思是identification_code.value!=。在JS中也是无效的语法。您需要&&instead@RoryMcCrossan我已经做了更改,但现在什么也没发生。大纲没有改变颜色,控制台中也没有任何记录。ajax成功了吗?@c如果data.code!=标识\代码.value{…}进行了更改,但现在什么也没有发生。框的颜色没有改变,控制台@subhabratamondal中也没有记录任何内容。在该输入框中失去焦点后,可以使用模糊代替更改模糊。键入一些内容并从该框中取出焦点,然后检查它是否工作。。
var deferred = $.Deferred();
$('#id_identification_code').blur(function(){
var school_code = $(this).val();
var school_name = document.getElementById('id_school').value;
$.ajax(
{
url: '/checks/validate_school/',
data: {
'name':school_name,
},
dataType: 'json',
success: function(data){
if(data.code == school_code){
console.log('Codes Match')
document.getElementById('id_school').style.borderColor='green';
document.getElementById('id_identification_code').style.borderColor='green';
}else{
console.log('Codes do not match')
document.getElementById('id_school').style.borderColor='red';
document.getElementById('id_identification_code').style.borderColor='red';
}
}
}
)
})