从javascript同步调用Struts2动作

时间:2016-03-05 16:12:50

标签: javascript synchronous

我试图用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.
    });
}

需要一个像这样的例子。

3 个答案:

答案 0 :(得分: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
});

但是,我建议您重新考虑代码,为响应到达时打算运行的内容编写单独的函数,并在回调中添加这些函数。

答案 1 :(得分:0)

你必须在你的函数中添加这一行,它将使调用同步一个

$.ajaxSetup({async: false});

喜欢这个

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

答案 2 :(得分: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);
}