【问题标题】:how to implement asynchronous get in ajax如何在ajax中实现异步获取
【发布时间】:2018-08-21 18:38:50
【问题描述】:

我应该在脚本中写什么以使javascript首先异步实现ajax方法GET,然后是另一个简单的函数(按我的脚本顺序)?

因为在这里调试时我看到 getCategories() 在 WriteCategories(categories) 之前实现

$.ajax({
    url: '/api/ListingAPI/GetCategoriesById?id=1',
    type: 'GET',
    dataType: 'json',
    success: function WriteCategories(categories) {
        // ...
    }
});
var test = getCategories();

【问题讨论】:

  • 正如您在一个答案中已经看到的那样,它是异步的。另请注意:ajax 调用可能会中断前一个调用,因此您永远不会收到答案。

标签: javascript jquery ajax asynchronous asp.net-web-api


【解决方案1】:

其实你想要同步执行,

您需要在 ajax 请求中添加async: false,(但请注意,它会冻结您的 UI,直到您的请求完成,实际上不建议这样做)

$.ajax({
    url: '/api/ListingAPI/GetCategoriesById?id=1',
    type: 'GET',
    async: false,
    dataType: 'json',
    success: function WriteCategories(categories) {
        // ...
    }
});
var test = getCategories();

或者您可以在 ajax 成功回调上调用您的函数,

$.ajax({
    url: '/api/ListingAPI/GetCategoriesById?id=1',
    type: 'GET',
    dataType: 'json',
    success: function WriteCategories(categories) {
            var test = getCategories();
    }
});

据您所知,您可以在 ajax 的 data 选项中传递查询字符串参数,而不是查询字符串本身,

var queryStringData = {id : 1}
$.ajax({
    url: '/api/ListingAPI/GetCategoriesById',
    type: 'GET',
    dataType: 'json',
    data: queryStringData,
    success: function WriteCategories(categories) {
            var test = getCategories();
    }
});

【讨论】:

  • async: false 已弃用,不应使用,这也是个坏例子
  • @Mevia 同意,但由于 OP 需要同步执行,
  • 如果您需要同步 ajax - 这意味着您的应用程序架构设计不佳。 OP 显然没有经验,我不认为教他/她的不良做法是正确的做法。需要指出的是,应该重新设计应用程序,而不是鼓励使用已弃用的功能
【解决方案2】:

试试这个代码。

$.ajax({
    url: '/api/ListingAPI/GetCategoriesById?id=1',
    type: 'GET',
    dataType: 'json',
    success: function WriteCategories(categories) {
        var test = getCategories();
    }
});

你可以在ajax成功后调用这个函数。这样AJAX get会先被执行。

【讨论】:

    猜你喜欢
    • 2014-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多