在其他函数之前运行javascript函数

在其他函数之前运行javascript函数,javascript,function,Javascript,Function,我有以下代码: var is_recorded_book; function callback(data){ is_recorded_book = data.result alert(is_recorded_book) } function check_book(){ Dajaxice.darkoob.migration.is_book(callback, {'book_title': $('#id_book_title').val() }) alert ("check

我有以下代码:

var is_recorded_book; 
function callback(data){

  is_recorded_book = data.result
  alert(is_recorded_book)

}

function check_book(){
  Dajaxice.darkoob.migration.is_book(callback, {'book_title': $('#id_book_title').val() })
  alert ("check book" +is_recorded_book);
  if (is_recorded_book){
    return true;
  }else{
    return false;
  }
}
</script>

但是警报('dfsdf')不起作用。

您需要在回调中执行警报:

Dajaxice.darkoob.migration.is_book(function (data) {
    callback(data);
    alert("check book" +is_recorded_book);
}, {'book_title': $('#id_book_title').val() });

这就是您的
支票簿的工作原理:

  • 您发出一个异步http请求:这意味着发送请求并等待服务器响应
  • 同时显示
    警报检查簿
    ,函数返回false,因为
    isRecorder\u book
    仍然未定义
  • 一段时间后,当服务器响应时,
    回调
    运行并设置
    is\u recorder\u book
    (太晚了)
  • 有一些变通办法

  • 使用synchronoushttp请求(在方法中将第三个参数设置为
    false

  • 或者在设置
    is\u recorder\u book

  • 第二个选项的代码:

    var是记录的\u book=false;
    函数回调(数据){
    记录在案吗?记录簿=data.result;
    警报(记录在记录簿上);
    警报(“支票簿”+是记录簿);
    document.getElementById(“yourform”).submit();
    }
    功能检查书(){
    Dajaxice.darkoob.migration.is_book(
    回调,{'book_title':$('id_book_title').val()}
    );
    }
    
    按照代码的结构,您无法执行异步调用并取消表单提交。您必须更改逻辑。@28请尝试使用console.log()而不是alert,因为alert正在阻塞。
    function check_book(){
        Dajaxice.darkoob.migration.is_book(function(data){
        callback(data);
        alert('dfsdf')
        if (is_recorded_book){
          return true;
        }else{
          return false;
        }
      }, {'book_title': $('#id_book_title').val() })
    }
    
    Dajaxice.darkoob.migration.is_book(function (data) {
        callback(data);
        alert("check book" +is_recorded_book);
    }, {'book_title': $('#id_book_title').val() });
    
    var is_recorded_book = false; 
    function callback(data) {
      is_recorded_book = data.result;
      alert(is_recorded_book);
      alert("check book" +is_recorded_book);
      document.getElementById("yourform").submit();
    }
    
    function check_book(){
      Dajaxice.darkoob.migration.is_book(
        callback, {'book_title': $('#id_book_title').val() }
      );
    }
    
    <form id="yourform" onsubmit="check_book(); return is_recorder_book;">