我正在尝试从外部JSON文件获取文件内容,但在警报中我一直保持null。

JS:

function getText() {
    var result = null;
    var file = 'file.json';
    $.ajax({
        type: 'get',
        data: 'data',
        dataType: 'json',
        async: false,
        success: function() {
            var ranData = data[Math.floor(Math.random() * data.length)];
            result = ranData;
        }
    });
    alert(result);
}


外部档案:

var data = [
  ["a", "word 1"],
  ["e", "word 2"],
  ["i", "word 3"],
  ["o", "word 4"],
  ["u", "word 5"]
]


当我在同一文件中使用data数组时,它工作正常。我在做什么?任何帮助将不胜感激!

更新:

function readFiles() {
        var result = null;
        var file = 'dictionary.js';
        $.ajax({
            url: file,
            type: 'get',
            data: 'data',
            dataType: 'script',
            async: false,
            success: function(data) {
                var randomData = data[Math.floor(Math.random() * data.length)];
                result = randomData;
            }
        });
        alert(result);
 }


仍然获得空值。

最佳答案

您忘记了将data参数传递给成功回调函数,但同时也忘记了设置将请求发送到的url参数:

 function getText() {
    var result = null;
    $.ajax({
        urL: 'file.json',
        type: 'GET',
        data: 'data',
        dataType: 'json',
        async: false,
        success: function(data) {
            var ranData = data[Math.floor(Math.random() * data.length)];
            result = ranData;
        }
    });
    alert(result);
}


还有一件事情。您确实不应该在ajax中使用async:false,因为同步ajax将完全冻结浏览器,直到ajax请求完成。您应该在成功回调中处理数据。我还注意到,在成功回调中,您正在检查数组长度data.length,由于您希望以JSON格式从服务器取回数据(您将dataType选项设置为)

09-11 08:22
查看更多