2013-04-13 109 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

感謝您的回答 –