如何让 jQuery 执行同步而不是异步 Ajax 请求?

2022-08-29 22:03:58

我有一个JavaScript小部件,它提供了标准的扩展点。其中之一是功能。它应该返回以防止创建项目。beforecreatefalse

我使用jQuery将Ajax调用添加到此函数中:

beforecreate: function (node, targetNode, type, to) {
  jQuery.get('http://example.com/catalog/create/' + targetNode.id + '?name=' + encode(to.inp[0].value),

  function (result) {
    if (result.isOk == false) 
        alert(result.message);
  });
}

但是我想阻止我的小部件创建项目,所以我应该在母函数中返回,而不是在回调中返回。有没有办法使用jQuery或任何其他浏览器内API执行同步AJAX请求?false


答案 1

jQuery 文档中:将异步选项指定为 false 以获取同步 Ajax 请求。然后,您的回调可以在您的母函数继续之前设置一些数据。

下面是按照建议进行更改的代码的外观:

beforecreate: function (node, targetNode, type, to) {
    jQuery.ajax({
        url: 'http://example.com/catalog/create/' + targetNode.id + '?name=' + encode(to.inp[0].value),
        success: function (result) {
            if (result.isOk == false) alert(result.message);
        },
        async: false
    });
}

答案 2

您可以通过调用

jQuery.ajaxSetup({async:false});

然后使用以下命令执行 Ajax 调用jQuery.get( ... );

然后再次打开它一次

jQuery.ajaxSetup({async:true});

我想它的工作原理与@Adam建议的相同,但对于想要重新配置它们或更复杂的语法的人来说,这可能会有所帮助。jQuery.get()jQuery.post()jQuery.ajax()