Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让Javascript/Jquery/AJAX等待代码执行_Javascript_Jquery_Ajax_Forms - Fatal编程技术网

如何让Javascript/Jquery/AJAX等待代码执行

如何让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/”, 数据:{ “学校”:学校, }, 数据类型

我的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:

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'; 
            }

        }

    }
)

})