2013-04-22 99 views
1

我正在嘗試使用jQuery dialogbeforeClose功能。我正在檢查用戶表格數據是否格式正確,如果不正確,請將false返回到beforeClose,以便用戶可以重新輸入信息。AJAX完成之前沒有發生成功功能

對話框代碼調用函數submituserupdateformbeforeClose

.dialog({beforeClose: function() { 
    formresult=submituserupdateform($('#myaccountdialog').find('form')); 
    if (formresult !="okay"){ 
    return false; 
} 
}}) 

submituserupdateform功能檢查,看看是否有在代碼中的錯誤:

function submituserupdateform($tgt){ 
    var url='./includes/admin/user/myaccount.php'; 
    $.ajax({ 
     type: "POST", 
     url: url, 
     data: $tgt.serialize(), 
     success: function(data){ 
     $("#myaccountdialog").html(data); 
     if ($('.error').length){ 
      var myresult= "notokay"; 
     } else { 
      var myresult ="okay"; 
     } 
     }, 
     dataType: "html" 
    }); 
    return myresult; 
} 

我已搜查,並發現https://stackoverflow.com/questions/1632039/return-value-from-ajax-call,但我已經在我的成功回調中設置了myresult。我也試過ajaxComplete,ajaxSuccess,.done。根據控制檯,我沒有試過套myresult;我總是最後有:

Uncaught ReferenceError: myresult is not defined

這必須是一個簡單的錯誤,請幫助我,如果你看到我的錯!

+0

問題是ajax的「異步」行爲。 – 2013-04-22 17:41:14

回答

1

了Ajax的異步行爲將會使AJAX成功callback-之前,你的函數返回(那是你不想要什麼

您可以添加asyncfalse

var myresult ="": 
$.ajax({ 
     type: "POST", 
     url: url, 
     data: $tgt.serialize(), 
     async:false, 
     success: function(data){ 
+0

對不起,我嘗試添加'async:false,'(其實在我提交問題之前),並且我得到完全相同的結果。 – Sablefoste 2013-04-22 18:06:15

+0

你應該在ajax調用之前聲明'myresult' ..參見我的回答 – 2013-04-22 18:15:48

+0

對不起,在發佈時,我做了簡化更改。你回答絕對是正確的;它確實有用!謝謝! – Sablefoste 2013-04-22 18:37:52

0

var myresult 

不是全局可用的函數聲明像這樣

function submituserupdateform($tgt){ 

    var myresult; 
+0

需要添加'async:false'也是每個其他答案。 – Sablefoste 2013-04-22 19:31:08

1

這是因爲myresult的作用範圍只有成功的塊。聲明它之外

function submituserupdateform($tgt){ 
    var url='./includes/admin/user/myaccount.php'; 
    var myresult; 
    $.ajax({ 
     type: "POST", 
     url: url, 
     data: $tgt.serialize(), 
     success: function(data){ 
     $("#myaccountdialog").html(data); 
     if ($('.error').length){ 
      myresult= "notokay"; 
     } else { 
      myresult ="okay"; 
     } 
     return myresult; 

     }, 
     dataType: "html" 
    }); 

} 

還有如@Mohammad阿迪爾指出,有一種可能性,即前formResult被從AJAX

if (formresult !="okay"){ 
    return false; 
} 

值分配在這種情況下,下面的代碼來執行,他可以按照他的建議與async = false一起去。爲了您的代碼工作始終,您應該添加這也

+0

這是真的,但是,它仍然是'未定義'。 – 2013-04-22 17:46:50

+0

@KevinB謝謝指出。編輯。 – hop 2013-04-22 17:50:50

+0

進行這兩個更改給了我相同的結果(formresult == undefined)。 – Sablefoste 2013-04-22 18:07:56

0

$阿賈克斯是異步的,這意味着它將會發布該請求並立即返回。在後臺運行ajax請求時,正常腳本執行將繼續。

你應該做的是顯示一些等待圖標,同時ajax請求在後臺打開對話框中運行。一旦ajax請求返回,使用ajax事件處理程序處理結果,並根據結果關閉對話框或保持其打開顯示錯誤消息。

+0

如何知道AJAX請求何時完成? – Sablefoste 2013-04-22 18:10:03