2013-04-13 77 views
0

我已经按照JS代码提交表单,我保持表单提交的函数名为submitForm,以便它可以用于多个表单,只需将selectoraction值传递给submitForm函数。JS:回调函数未执行

function submitForm(selector, action, onComplete) { 
    var response 
    $(selector).submit(function (e) { 
    e.preventDefault(); 
    var data = $(this).serializeArray(); 
    $.ajax({ 
     type: 'POST', 
     url: action, 
     data: data, 
     dataType: 'json', 
     a 
     sync: false, 
     success: function (data) { 
     response = data; 
     } 
    }); 
    }); 
    return response; 
} 
submitForm(".lform", "user.php", function (response) { // Callback function 
    // Doing necessary stuff 
}); 

在上面的代码中,回调函数没有执行,可能是什么原因?和回调函数里面,下面的代码是存在的,

location.reload(); // To refresh the total DOM, 
$(".c_form").dialog({ 
    closeOnEscape: false, 
    title: title, 
    modal: true, 
    close: function() { 
    $(this).dialog('destroy').hide(); 
    } 
}); 

我想显示的页面重新加载完成后,对话框,这可能吗?

+2

'var response'不会被初始化,因为函数在AJAX请求完成请求之前已经返回。 – Aiias

回答

2

不能返回response。那时候,它仍然是undefined,因为AJAX还没有放置data

您的回调函数是第三个参数onComplete。在AJAX成功,执行它,并把它传递data

success: function (data) { 
    onComplete(data); 
} 
+0

我试过你如何建议它的工作正常,期望'重新加载'的页面和'dialogbox'问题。是否有可能使这两个按预期工作?谢谢 –

+1

您的重新加载回调的问题是,当您调用location.reload()页面重新加载和代码之后未执行,因为页面被重新加载 – skukx

2

我@Joseph梦者同意,也可以添加错误回调,您的要求可能有误,因为成功的回调不执行,加它就像成功的回电:

error: function() { 
    alert("ERROR!!"); 
} 

,并与你的代码中不能显示一个对话框,这样一来,您所呼叫的重载方法后呈现的对话框,这将创建一个新的DOM元素,其中前一个页面可以做没有什么新的页面(重新加载后),我的建议是发送一个查询字符串参数指示显示对话框domain.com/smth?show_dialog=1并在你的JS页面加载时检查这个参数是否存在显示对话框。

+0

感谢您的回答 –