javascript - JS — 尝试返回 AJAX 数据

标签 javascript jquery ajax requirejs

我一直在努力使用 jQuery 从 AJAX 调用中获取数据。我正在使用 RequireJS,这样我的 JavaScript 就更易于维护/模块化。我只使用 RequireJS 几天,所以我可能做得对,也可能做得不对。只是寻找一种方法来保持我的 JS 模块化和干净。

这是我到目前为止所拥有的。我知道它正在获取正确的数据,因为如果我 console.log(data[Math.floor(Math.random()*data.length)]) ,数据就在那里。 JSON 文件很长,所以我不会向您展示这一点,请相信我的话 — 它有效。

var maze;
define(["jquery"], function($){
    $.ajax("js/mazes.json", {
        dataType: "json",
        type: "get",
        success: function(data){
            var maze = data[Math.floor(Math.random()*data.length)];
        }
    });
    return {
        randomMaze: maze    
    };
});

我也尝试过这个(在匿名函数中声明 maze)

define(["jquery"], function($){
    var maze;
    $.ajax("js/mazes.json", {
        dataType: "json",
        type: "get",
        success: function(data){
            var maze = data[Math.floor(Math.random()*data.length)];
        }
    });
    return {
        randomMaze: maze    
    };
});

我不知道我做错了什么。只是想返回data[Math.floor(Math.random()*data.length)]

最佳答案

jQuery.ajax() success异步返回结果,mazesuccess 之外同步调用时可能无法定义在

return {
        randomMaze: maze    
    };

尝试返回 jQuery Promise 对象 $.ajax()从函数,异步返回对象 success回调

 // return jQuery promise object
 return $.ajax("js/mazes.json", {
        dataType: "json",
        type: "get",
        success: function(data){
            // return object as jQuery promise value
            return {
                     randomMaze: data[Math.floor(Math.random()*data.length)];
            }
        }
    });

另请参阅How do I return the response from an asynchronous call?

关于javascript - JS — 尝试返回 AJAX 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31932693/

相关文章:

javascript - 如何在 Mocha 测试中设置变量

javascript - 如何根据旁边的div类设置div高度?

java - 没有通过 Ajax 的 Servlet 响应

jquery - 在页面中间输出脚本标签是一种不好的做法吗?

jquery - 如何正确地将模型与 2 个不同的对象关联?(Rails 4)

javascript - CKEditor - 当 DOM 节点被删除时销毁一个实例

javascript - 带有javascript css的导航栏

javascript - 你如何对 AngularFire 集合进行排序?

javascript - 另一个文件中功能的视觉响应

javascript - 即使资源存在,JQuery $.ajax 请求也会返回 "Error 404"