获得以下代码:
$('#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。只是不确定如何像上面那样做。
答案 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)