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

将jQuery ajax响应文本分配给变量constanty将返回null,jquery,ajax,variables,responsetext,Jquery,Ajax,Variables,Responsetext,希望你们中的一位在这个伟大的网站上能够提供帮助。我在为jQuery ajax调用响应文本分配变量时遇到问题 我有一个表格,提交时会运行我的“checkemail”功能来更改数据库中的电子邮件地址。如果找到,则responseText==“true”,否则为“false”。这很好,可以通过Firebug看到……但是响应文本应该分配给的实际变量始终显示“”,因此导致函数始终返回false function checkemail(){ var EmailFro

希望你们中的一位在这个伟大的网站上能够提供帮助。我在为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;
            }   

        }   

如果有人能指出我做错了什么,我们将不胜感激。

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

var EmailCheckRes = $.ajax({

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

    }).responseText;

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

您的ajax url需要是
emailcheck.php的web url
而不是使用
/
的相对系统路径

var EmailCheckRes = $.ajax({

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

    }).responseText;

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

问题在于,$.ajax方法是异步执行的,因此checkemail函数在您的ajax请求完成之前返回

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


您需要重新构造代码,以便在ajax请求完成时接受回调并执行它。

问题在于,$.ajax方法是异步执行的,因此checkemail函数在ajax请求完成之前返回

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


您需要重新构造代码以接受回调,并在ajax请求完成时执行回调。

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

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

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

    if (checkThis) {
        DoSomething();
    }
    else {
        DontDoSomething();
    }
}
用于:

应用于您的代码时,可能会出现如下情况:

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.");
        }
    });
}

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

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

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

    if (checkThis) {
        DoSomething();
    }
    else {
        DontDoSomething();
    }
}
用于:

应用于您的代码时,可能会出现如下情况:

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.");
        }
    });
}

在事件的“document.ready”阶段,我很难将jQueryAjax的结果放入变量中

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

我尝试了很多很多不同的方法,但最终,我需要的答案是在这个stackoverflow页面:

感谢贡献者Charles Guillbert,我能够将数据输入到变量中,即使在我的页面首次加载时也是如此

下面是工作脚本的一个示例:

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");

在事件的“document.ready”阶段,我很难将jQueryAjax的结果放入变量中

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

我尝试了很多很多不同的方法,但最终,我需要的答案是在这个stackoverflow页面:

感谢贡献者Charles Guillbert,我能够将数据输入到变量中,即使在我的页面首次加载时也是如此

下面是工作脚本的一个示例:

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");

嗨,谢谢你的回复。我已经重新构造了一些东西,但是在success函数中执行return true/false似乎会导致一些范围问题,因为它只从ajax函数返回true/false,而不是从整体checkemail函数返回true/false。此时checkemail()始终返回true,表单正在提交。顺便说一句,我不认为将URL从相对更改为绝对会有任何区别。@Dan Twing我已经调整了我的答案,以采用不同的方法,因为您不希望为了利用
success
callback的优势而重新构造代码谢谢!设置为同步效果很好。我在这里学到了一些东西。嗨,谢谢你的回复。我已经重新构造了一些东西,但是在success函数中执行return true/false似乎会导致一些范围问题,因为它只从ajax函数返回true/false,而不是从整体checkemail函数返回true/false。此时checkemail()始终返回true,表单正在提交。顺便说一句,我不认为将URL从相对更改为绝对会有任何区别。@Dan Twing我已经调整了我的答案,以采用不同的方法,因为您不希望为了利用
success
callback的优势而重新构造代码谢谢!设置为同步效果很好。我在这里学到了一些东西。谢谢Derek,虽然我了解如何使用success调用,但我仍然不确定如何从ajax函数中实际返回一些可以使用的东西