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

时间:2013-06-04 13:31:02

标签: 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 book" +is_recorded_book);
  if (is_recorded_book){
    return true;
  }else{
    return false;
  }
}
</script>

并且有一个这样的表格:

        <form action="..." method='...' onsubmit='return check_book()'>
...
          <input type='submit' />

但我的输出是: alert(“check book”+ is_recorded_book); alert(is_recorded_book)

但我想首先运行alert(is_recorded_book)

我将check_book函数编辑为:

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() })
}

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

这就是check_book的工作原理:

  1. 您发出异步 http请求:这意味着请求已发送并等待服务器响应
  2. 同时显示alert check_book并且函数返回false,因为isRecorder_book仍未定义
  3. 一段时间后,当服务器响应时,callback会运行并设置is_recorder_book(太晚了)
  4. 有一些解决方法

    1. 使用同步 http请求(在open方法中将第三个参数设置为false

    2. 或者在设置is_recorder_book

    3. 后通过回调提交表单

      第二个选项的代码:

      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;">