从 javascript 同步调用 Struts 2 个动作

Call Struts 2 action from javascript synchronous

我正在尝试使用 JavaScript 同步调用 Struts 2 操作。我找到了几个示例,但其中 none 个有效。

我唯一要做的就是像这样调用异步操作:

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

需要这样一个有效的例子。

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

$.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.
    });
}

我建议您永远不要真正打算发送同步请求,因为它们会阻止您的 JS 在等待时执行进一步的任务,因为 JS 是单线程的。您发送同步请求的意图使您的意图很可能是由于缺乏对异步请求的理解或设计不良的结果。我谦虚地建议 $.ajax:

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

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

不要进行同步调用,强烈建议不要这样做,因为它会使浏览器无响应。某些浏览器(例如 Firefox)弃用了同步 API。

Note: Starting with Gecko 30.0 (Firefox 30.0 / Thunderbird 30.0 / SeaMonkey 2.27), synchronous requests on the main thread have been deprecated due to the negative effects to the user experience.

In rare cases, the use of a synchronous method is preferable to an asynchronous one.

此示例展示了如何发出简单的同步请求。

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);
}