成功函数使用验证引擎无效

时间:2012-09-26 19:42:24

标签: javascript jquery ajax

我无法使脚本正常工作,在运行时总会返回错误

$(document).ready(function()
{
    $("#form1").validationEngine({
        ajaxSubmit: true,
        ajaxSubmitFile: "note/note.php",
        success: false
    });
    if (success == "true")
    {
        function()
        {
            window.alert("Report Sent!");
            //write a confirmation to the user
            document.getElementById("update").innerHTML="Report Sent!";
            setTimeout(function()
            {
                document.getElementById("update").innerHTML="";
            },3000);
        }
    }
});

这可能是一个很好的解决方案吗?

2 个答案:

答案 0 :(得分:2)

问题在于:

$(document).ready(function()
{
    $("#form1").validationEngine({
        ajaxSubmit: true,
        ajaxSubmitFile: "note/note.php",
        success: false
    });

您正在将对象文字传递给validationEngine方法,success属性应该是一个函数,其中包含您希望在验证成功时执行的代码,而不是''将其设置为false,然后继续:

if (success == "true")
{
     function()
     {

您不仅使用实际上是对象属性的变量(因此您创建了一个全局变量, EVIL ),您正在声明该函数,但不会调用它。我注意到你正在检查success的值,期望它是一个字符串。 php脚本的返回值将作为参数传递给成功回调函数。我已经冒昧地改变了这个功能,以反映这一点:

$(document).ready(function()
{
    $("#form1").validationEngine({
        ajaxSubmit: true,
        ajaxSubmitFile: "note/note.php",
        success: function(response)//response is what the php script returns
        {
            //the function from your if branch goes here
        }
    });

你应该没事。完整代码应该类似于:

$(document).ready(function()
{//notice the curly braces around what you're passing to validationEngine
    $("#form1").validationEngine({
        ajaxSubmit: true,
        ajaxSubmitFile: "note/note.php",
        success: function(response)
        {
            if (response !== 'true')
            {
                if (window.console)
                {
                    console.log(response);
                    alert('check your console to see the response');
                }
                else
                {
                    alert(response);
                }
                return;
            }
            alert("Report Sent!");//no need for window here
            document.getElementById("update").innerHTML="Report Sent!";
            setTimeout(function()
            {
                document.getElementById("update").innerHTML="";
            },3000);
        }
    });
    //As I said, you're passing an object, so you could write the code above like so:
    var validationArgs = {ajaxSubmit:true,ajaxSubmitFile:'note/note.php'};
    validationArgs.success = function()
    {
        //your function
    };
    $('#form1').validationEngine(validationArgs);
});

答案 1 :(得分:0)

您需要使用回调函数。

$(document).ready(function() {
    var update = $("#update");
    // Callback 
    var onSuccess = function() {
        alert("Report Sent!");

        //write a confirmation to the user           
        update.html("Report Sent!");

        setTimeout(function(){
             update.html("");
        },3000);
    };

    $("#form1").validationEngine({
        ajaxSubmit: true,
        ajaxSubmitFile: "note/note.php",
        success: onSuccess
   });
});