将jQuery ajax响应文本分配给变量constanty将返回null

时间:2011-01-10 00:43:25

标签: jquery ajax variables responsetext

希望你在这个伟大的网站上有一个人可以提供帮助。我在将变量分配给jQuery ajax调用响应文本时遇到了问题。

我有一个表单,当提交运行我的“checkemail”函数来变量电子邮件地址可以在数据库中找到。如果找到,则responseText ==“true”,否则为“false”。这样工作正常,使用Firebug可以看到正常....但响应文本应该分配的实际变量是不断显示“”,因此导致函数一直返回false。

        function checkemail(){

            var EmailFromForm = $("#lostemail").val();

            var EmailCheckRes = $.ajax({

            type        : "POST",
            cache       : false,
            url         : "./scripts/passreset/emailcheck.php",
            data        : "Email="+EmailFromForm,
            dataType        : "text",

      }).responseText;


            if (EmailCheckRes == "true")
            {
                alert("Should say true:  " + EmailCheckRes);
                return true;
            }
            else
            {
                $("#ErrorMsg").html("Your email address is either invalid or not found.");
                alert("Should say false:  " + EmailCheckRes);
                return false;
            }   

        }   

如果有人对我做错了什么有任何指示,我们将不胜感激。

4 个答案:

答案 0 :(得分:3)

问题是$ .ajax方法正在执行异步,所以checkemail函数在 之前返回 你的ajax请求。

您的应用程序流程不是线性的,因此checkmail的返回值不会反映您的ajax请求返回的响应。

您需要重新构建代码以进行回调并在ajax请求完成后执行它。

答案 1 :(得分:1)

您的ajax网址必须是emailcheck.php的网址,而不是使用./的相对系统路径

var EmailCheckRes = $.ajax({

    type        : "POST",
    cache       : false,
    async       : false,
    url         : "scripts/passreset/emailcheck.php",
    data        : "Email="+EmailFromForm,
    dataType    : "text",

    }).responseText;

编辑:虽然它不是切换到同步服务器请求的最佳解决方案,但您可以设置ajax选项async: false,这将使浏览器等待响应继续,这应该消除你的问题。此外,我建议切换到绝对路径,和/或从相对路径的前面删除./。我在示例代码中添加了此选项。

答案 2 :(得分:1)

您需要重新构建代码。大多数AJAX调用都是异步的,这意味着代码的流程无需等待调用完成。

有意义的是,你需要改变:

function checkmail() {
    var checkThis = Ajax();

    if (checkThis) {
        DoSomething();
    }
    else {
        DontDoSomething();
    }
}

有:

function checkmail() {
    Ajax.success = function(checkThis){
        if (checkThis) {
            DoSomething();
        }
        else {
            DontDoSomething();
        }
    };

    Ajax.error= function(){
        ReportSomeError();
    };

    Ajax();
}

应用于您的代码,它可能是这样的:

function checkemail () {
    var EmailFromForm = $("#lostemail").val(),

    $.ajax({
        type:"POST",
        cache:false,
        url:"./scripts/passreset/emailcheck.php",
        data:"Email="+EmailFromForm,
        dataType:"text",
        success:function(EmailCheckRes){
            if (EmailCheckRes == "true") {
                alert("Should say true:  " + EmailCheckRes);

                /* You cannot longer "return" this value, add code to do
                 * what you need done
                 */
                return true;
            }
            else {
                $("#ErrorMsg").html("Your email address is either invalid or not found.");
                alert("Should say false:  " + EmailCheckRes);

                /* You cannot longer "return" this value, add code to do
                 * what you need done
                 */
                return false;
            }
        },
        error:function(){
            $("#ErrorMsg").html("There was an AJAX communication error.");
        }
    });
}

答案 3 :(得分:0)

我真的很难在事件的“document.ready”阶段将jQuery ajax的结果存入我的变量。

当用户在页面加载后触发选择框的“onchange”事件时,jQuery的ajax会加载到我的变量中,但是当页面首次加载时,数据不会提供变量。

我尝试了很多很多不同的方法,但最后,我需要的答案是在这个stackoverflow页面上:JQuery - Storing ajax response into global variable

感谢撰稿人Charles Guilbert,我能够将数据输入到我的变量中,即使我的页面首次加载也是如此。

以下是工作脚本的示例:

jQuery.extend
(
    {
        getValues: function(url) 
        {
            var result = null;
            $.ajax(
                {
                    url: url,
                    type: 'get',
                    dataType: 'html',
                    async: false,
                    cache: false,
                    success: function(data) 
                    {
                        result = data;
                    }
                }
            );
           return result;
        }
    }
);

// Option List 1, when "Cats" is selected elsewhere
optList1_Cats += $.getValues("/MyData.aspx?iListNum=1&sVal=cats");

// Option List 1, when "Dogs" is selected elsewhere
optList1_Dogs += $.getValues("/MyData.aspx?iListNum=1&sVal=dogs");

// Option List 2, when "Cats" is selected elsewhere
optList2_Cats += $.getValues("/MyData.aspx?iListNum=2&sVal=cats");

// Option List 2, when "Dogs" is selected elsewhere
optList2_Dogs += $.getValues("/MyData.aspx?iListNum=2&sVal=dogs");