0

我有这个代码:

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); 警报(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() })
}

但 alert('dfsdf') 不起作用。

4

2 回答 2

2

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

Dajaxice.darkoob.migration.is_book(function (data) {
    callback(data);
    alert("check book" +is_recorded_book);
}, {'book_title': $('#id_book_title').val() });
于 2013-06-04T13:32:50.140 回答
0

这就是你的check_book工作方式:

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

有一些解决方法

  1. 要么使用同步http请求(将第三个参数设置为falseopen方法)。

  2. 或者设置后通过回调提交表单is_recorder_book

第二个选项的代码:

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;">
于 2013-06-04T13:59:52.123 回答