2011-11-29 219 views
0

的结果得到了下面的代码:函数返回Ajax调用

$('#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) 

的ADDUSER()函数是从点击事件被调用。我如何确保函数FindUserByEmail从ajax调用返回值?我不知道如何做到这一点。

通过自己调用URL返回正确的JSON,演示返回正确的PID。只是不知道如何做到这一点,如上所述。

回答

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) 
2

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

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