0

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

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

4 回答 4

3

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

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

您需要重组代码以获取回调并在您的 ajax 请求完成时执行它。

于 2011-01-10T01:21:53.610 回答
1

您的 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,这将使浏览器等待响应继续,这应该可以消除您的问题。另外,我建议切换到绝对路径,和/或./从相对路径的前面删除。我已将此选项添加到我的示例代码中。

于 2011-01-10T00:46:19.740 回答
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.");
        }
    });
}
于 2011-01-10T03:49:15.480 回答
0

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

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

我尝试了很多很多不同的方法,但最后,我需要的答案是在这个 stackoverflow 页面:JQuery - 将 ajax 响应存储到全局变量中

感谢贡献者 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");
于 2012-09-19T17:25:50.410 回答