2016-03-05 26 views
0

我想用javascript同步調用struts2動作我發現了幾個例子,但他們都沒有工作。從javascript同步調用Struts2動作

我有工作的唯一的事情就是打電話的動作異步這樣的:

function toggel(id) { 
    var url = "./ToggelProcess.action"; 
    $.post(url, {id : id}, function (resp) { 
     // resp is the response from the server after the post request. 
    }); 
} 

需要像這樣的工作的例子。

+0

爲什麼你認爲你希望它是同步的?在大多數情況下,這不僅是一種不好的做法,而且這種行爲已被棄用。 – 2016-03-05 16:17:30

回答

1

我建議你應該從來沒有真正打算髮送同步請求,因爲它們會阻止JS在等待時進一步執行任務,因爲JS是單線程的。您發送同步請求的意圖很可能是您的意圖是由於缺乏對異步請求的理解或不良設計的結果。取而代之的$.post我謙恭地建議$.ajax

$.ajax({ 
    type: 'POST', 
    url: url, 
    data: {id : id}, 
    success: function (resp) { 
     // resp is the response from the server after the post request. 
    }, 
    async:false 
}); 

但不是,我建議你應該反思一下你的代碼,編寫不同的功能,你打算當響應到達時運行,並在回調膽這些功能是什麼。

+0

好吧,那正是我期待的...所以我明白正確的是異步是爲這個帖子請求設置的嗎? – John

+0

@John,確實如此,是的。 –

0

您必須添加自己的函數中這條線,就會使呼叫同步一個

$.ajaxSetup({async: false}); 

喜歡這個

​​
+0

我不喜歡這個解決方案。您正在將異步的默認值修改爲已棄用的值。如果想要同步發送給定的請求,那麼很好,他/她將會這樣做,然後重構代碼。但要使其成爲默認設置...嗯,我不同意。 –

0

不要進行同步調用,因爲它使瀏覽器無法響應,所以非常沮喪。一些瀏覽器如Firefox使得同步API不推薦使用。

注意:從Gecko 30.0(Firefox 30.0/Thunderbird 30.0/SeaMonkey 2.27)開始,由於對用戶體驗的負面影響,主線程上的同步請求已被棄用。

在極少數情況下,使用同步方法優於異步方法。

此示例顯示如何進行簡單的同步請求。

var request = new XMLHttpRequest(); 
request.open('POST', 'ToggelProcess.action', false); // `false` makes the request synchronous 
request.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
request.send("id="+id); 

if (request.status === 200) { 
    console.log(request.responseText); 
}