ajax,可以同步返回数据吗

$.ajax({
    url: "xxx",
    type: 'POST',
    data: data
    dataType: 'json',
    contentType: "application/json;charset=UTF-8",
    success: function(data) {
        console.log(data)//这里同步返回
    },
    error: function(data) {
        console.log(data)
    }
})
阅读 4.9k
6 个回答

async 设置成 false 就行

image

问题来了,你这么搞 真的合适么?js是可是单线程在跑的哦

可以 加个

async: false

设置async为false

我猜应该是下面的流程操作很多都是依赖返回的数据。
async 如果是首页的话用同步可能网页会卡死。 如果是设置超时10S的话那卡10S。。 或者更长。。。

建议可以用Promise把ajax包一次。 不过对环境有要求Promise 你可以下个Promise的包,

function ajax() {
    return Promise(resolve, reject => {
        $.ajax({
            url: "xxx",
            type: 'POST',
            data: data
            dataType: 'json',
            contentType: "application/json;charset=UTF-8",
            success: function(data) {
                resolve(data)
            },
            error: function(data) {
                reject(data)
            }
        })
    })
}

ajax().then((data) => {
    // ...
})

jQuery 从 1.5 开始,就实现了 Promise ,不需要再去包装,详见文档。

jQuery.ajax() | jQuery API Documentation | jQuery API Documentation")

The jqXHR objects returned by $.ajax() as of jQuery 1.5 implement the Promise interface, giving them all the properties, methods, and behavior of a Promise (see Deferred object for more information). These methods take one or more function arguments that are called when the $.ajax() request terminates. This allows you to assign multiple callbacks on a single request, and even to assign callbacks after the request may have completed. (If the request is already complete, the callback is fired immediately.) Available Promise methods of the jqXHR object include:

译:$ .ajax()从jQuery 1.5开始由$ .ajax()返回的jqXHR对象实现Promise接口,为它们提供Promise的所有属性,方法和行为(有关更多信息,请参见Deferred对象)。 这些方法采用一个或多个函数参数,这些参数在$ .ajax()请求终止时被调用。 这使您可以在单个请求上分配多个回调,甚至可以在请求完成后分配回调。 (如果请求已完成,则立即触发回调。)jqXHR对象的可用Promise方法包括:

图片.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题