Javascript 未返回ajax值

Javascript 未返回ajax值,javascript,ajax,Javascript,Ajax,get_email.jsp: function validateEmail(){ var check =email(); alert(check); } function email() { var TCode = document.getElementById('email').value; var result="hey"; $.ajax({ type: "POST", async: false,

get_email.jsp:

function validateEmail(){
    var check =email();
    alert(check);    
}
function email()
{
    var TCode = document.getElementById('email').value;
    var result="hey";
    $.ajax({
        type: "POST",
        async: false,
        url: "get_email.jsp",
        data: "email="+TCode,
        success: function(html){
            $("#email_info").html(html);
            result=$("#email_info").html(html);
            return result;
        }
    });
}

可用
无法使用的
注意:我的AJAX函数是同步的


现在从函数验证电子邮件我调用一个函数电子邮件,在这里我调用一个jsp页面,在那里我检查数据库中的电子邮件是否已经存在,从那里我返回显示在我的页面上的文本,但我想要的是,我从这个ajax函数得到一些值,如果电子邮件id已经存在,它不应该让用户提交表单,但我无法在validate email函数中获取值…它给了我未定义的值。

您将需要添加一个回调,即使您正在使用同步请求,返回函数也将未定义

<%@ page import="java.util.*" %>
<%@ page import="java.sql.*" %>
<%@ page import="bean.*" %>
<%@ page import="database.*" %>


<%  

                                                int flag=0;
                                                String Email=request.getParameter("email");
                                                userDAO UD=new userDAO();
                                                flag=UD.getEmailInfo(Email);
                                                if(flag==1)
                                                {
                                                    %>
                                                 Available
                                                <% }
                                                else
                                                {%>Not Available
                                            <%}%>

将所有的后期ajax处理放在
success
回调中。

success
函数返回什么都不做。这不会神奇地使
电子邮件
返回值

function validateEmail(){
    email(function(check){
        alert(check)
    });
}
function email(callback)
{
    var TCode = document.getElementById('email').value;
    var result="hey";
    $.ajax({
        type: "POST",
        async: false,
        url: "get_email.jsp",
        data: "email="+TCode,
        success: function(html){
            $("#email_info").html(html);
            result=$("#email_info").html(html);
            callback(result);
        }
    });
}
您需要通过将
return
移动到回调外部,使
email
返回值

function validateEmail(){
    email(function(check){
        alert(check)
    });
}
function email(callback)
{
    var TCode = document.getElementById('email').value;
    var result="hey";
    $.ajax({
        type: "POST",
        async: false,
        url: "get_email.jsp",
        data: "email="+TCode,
        success: function(html){
            $("#email_info").html(html);
            result=$("#email_info").html(html);
            callback(result);
        }
    });
}
这会起作用,但我强烈建议不要这样做
async:false
将使浏览器锁定,并且在AJAX请求完成之前不会响应任何输入

您应该做的是丢失
async:false
,然后使用回调。注意,您可能需要更改程序逻辑。您不应该从AJAX调用返回

function email()
{
    var TCode = document.getElementById('email').value;
    var result="hey";
    $.ajax({
        type: "POST",
        async: false,
        url: "get_email.jsp",
        data: "email="+TCode,
        success: function(html){
            $("#email_info").html(html);
            result = html;  // Don't set this to a jQuery object
        }
    });

    return result;
}

请发布服务器端代码移动
返回结果退出回调。@Rocket Hazmat…那么我应该把它放在哪里?@RocketHazmat after ajax函数还是success函数?@user2137186:after
$。ajax
,你不能把它放在
success
之后,这毫无意义。它会提醒[object,object now]do result=html而不是result=$(“#email#info”).html(html);在成功函数中,他设置了async:false,所以应该是synchronousWell我会被诅咒的。。。你说得对。考虑到函数的名称,我从未考虑过这是一个选项!我认为,回拨答案站得住脚:)