2011-08-04 77 views
0

我得到了類似的在這裏這個問題一個問題: Javascript and AJAX, only works when using alert()AJAX不同步

我有一個AJAX調用敲定表單時在更新數據庫中的字段。但是,通話似乎沒有到達控制器。當我提醒時,它就會起作用。由於這個問題我目前已經設置爲同步,但即使如此,沒有警報,它每5到6次只能到達控制器1。這是AJAX位:

function finalize() { 
    if (!confirm("Are you sure?")) 
     return; 

    $("#finalizebutton").attr('disabled', 'disabled'); 

    var request = new XMLHttpRequest(); 
    var url = "/Operation/Finalize/"; 
    request.open("GET", url, false); 
    request.send(); 

    $("#otherformstuff").attr('disabled', 'disabled'); //a few disable calls 
} 

在控制方面我有大約:

public ActionResult Finalize() 
{ 
    db.setfinalized(true); //breakpoint here that only gets hit about 1 in 5 tests 
    return Content("Finalized"); 
} 

即使有在那裏有時不起作用猛警報。 奇怪的是,我提出了request.responseText的警報,它給了我控制器的響應,而沒有實際處理它的控制... 任何想法都會被讚賞。

+0

你爲什麼不使用jQuery的AJAX? –

+0

@Daniel爲什麼你覺得需要使用jQuery的一切?公元前 – Kayla

+1

他已經有jquery包括在內。 –

回答

1

因爲你說它是同步的。

你的問題是這一行:

request.open("GET", url, false); 

open方法需要3個參數。方法,url,第三個是一個布爾值,告訴它請求是否應該是異步的。

只要將false更改爲true,並且請求將是異步的。

request.open("GET", url, true); 

但是,你也可以只更換與此一行XHR代碼,整個塊..

$.get('/Operation/Finalize/'); 
+0

謝謝!有用!可以發誓我試過了,得到了同樣的結果。 雖然從概念上說,我不確定我看到爲什麼這不是相反的方式。如果它是異步的,那麼javascript將在呼叫進行時繼續執行,從而完成該功能。但是,當它是同步的時候,在繼續之前不應該等待響應嗎?並且在某些情況下,我沒有控制器執行適當的代碼就收到了正確的答覆。 – yoozer8

+0

當它是異步時,它會在運行以下代碼時獲取數據。當它是同步的時候,在調用send方法之後,它會在執行任何代碼之前等待響應。 – Kayla

+0

這就是我認爲應該這樣做,但它似乎並沒有這樣做。即使使用asynch = false,它也會禁用發送後禁用行中指示的所有元素。 – yoozer8