函数返回ajax调用的结果

时间:2011-11-29 22:32:25

标签: jquery ajax json

获得以下代码:

$('#next_btn').click(function() {
  addUser();
}); //$('#next_btn').click

function addUser() {
  var participant = {};
  var PID = 0;
  PID = FindUserByEmail($('#UserEmail').val());
  // do other things and add this user's data to the participant JSON object
} // function addUser()

function FindUserByEmail(user_email) {
  var url = escape(AJAX_URL_SELECTBYEMAIL + user_email);
  $.ajax({async: true
        , type:'POST'
        , url: url
        , dataType: 'json'
        , success: ajax_find_user_result 
        , error: ajax_error   
        }); // $.ajax
} // function FindUserByEmail(user_email)

function ajax_error(jqXHR, textStatus, errorThrown) {
  alert('X:' + jqXHR.status);
  alert('E:' + thrownError);
} // function ajax_error(jqXHR, textStatus, errorThrown)

function ajax_find_user_result(data) {
  if(data.result) {
    pid = data.result.PID;
    if (pid == 0) {
      alert('User not found');
      return false;
    } else {
      alert(pid);
    } // if (pid == 0)
  } else {
    alert('No results returned');
    return false;
  } // if(data.result)
} // function ajax_find_user_result(data)

从click事件中调用addUser()函数。如何确保FindUserByEmail函数返回ajax调用的值?我不知道该怎么做。

调用URL本身会返回正确的JSON,演示会返回正确的PID。只是不确定如何像上面那样做。

3 个答案:

答案 0 :(得分:2)

AJAX中的第一个'A'表示“异步”,这意味着在对$.ajax()的调用返回后,结果将返回。结果的所有处理必须在ajax_find_user_result中完成。

请注意,这不是限制。这实际上是一件好事,因为这意味着您的浏览器不会等待结果返回。 (还有其他方法可以解决这个问题,但回调就是在JavaScript中完成的方式,尤其是AJAX。)如果你真的想要进行同步调用,请在参数中设置async=false,但你真的,实际上不应该这样做(另外,在某些情况下不支持)。

答案 1 :(得分:0)

您可以在success处理程序中完成工作,也可以使用jQuery的.when()/.then() methods

答案 2 :(得分:0)

这个怎么样?

function FindUserByEmail(user_email) {
  var url = escape(AJAX_URL_SELECTBYEMAIL + user_email);
  $.ajax({async: true
      , type:'GET'
      , url: url
      , dataType: 'json'
      , success: function(data) {
        if(data.result){
          pid = data.result.PID;
          if(pid == 0) {
            return -1;
          } else {
            return pid;
          }
        } else {
          return -2;
        }
      }
      , error: ajax_error   
      }); // $.ajax
} // function FindUserByEmail(user_email)