jquery全局变量ajax返回null

时间:2017-09-20 07:50:30

标签: javascript jquery ajax

为此创造了一个小提琴,因为它很简单,但它不起作用;

var url = 'https://api.tiles.mapbox.com/v3/mapbox.geography-class.json';

function getData (url) {
    return $.ajax({
        'type': "POST",
        'url': url
    });
};
$(document).ready(function(){
    var a = null;

    getData(url).done(function(data){ a = data; });

    alert(a);
 });
也许是凌晨?

小提琴:https://jsfiddle.net/nextgenmappinginc/r88356tu/

目标:

我有多个包含geojson数据的本地文件。哪个我将作为一个数组返回给我。我想遍历这些创建对象并将这些对象推送到数组中。然后从所有这些ajax调用创建的新数组中。我想将此数组传递给将执行开放层代码的函数。

更新并完成了不同的小提琴

https://jsfiddle.net/nextgenmappinginc/x1yasngy/

但是。问题仍然存在即使您通过ASYNC也只能根据请求触发该功能。然后它仍然在函数中。从技术上讲,为什么它不能将它传递给另一个可以控制它的功能呢?

在小提琴中,您只需更改网址即可获得请求响应

//var url = 'https://api.tiles.mapbox.com/v3/mapbox.geography-class.json';
var url = {url : 'clientData/10BC99F2-05FD-4847-A277-2979C83BB42A/geojson/E36CC45E-C1B8-4C26-A714-EBA91ACE7C1C.js'}
var files = [];
files.push(url);

function getData (files) {
    var fileObjects = [];
    for (i=0; i<files.length; i++){
        $.ajax({
            'type': "GET",
            'url': files[i].url,
            success: function (response){
                fileObjects.push(response);
            }
        });
    }
    consoleMe(fileObjects);
}

function consoleMe(data){
    console.log(data);
}

getData(files);

2 个答案:

答案 0 :(得分:0)

在您的ajax代码中添加async:false,。删除此行

getData(url).done(function(data){ a = data; });

并添加以下行

getData(url).done(function(data){ a = data; });

尝试以下示例,这肯定会起作用

&#13;
&#13;
var url = 'https://api.tiles.mapbox.com/v3/mapbox.geography-class.json';

function getData (url) {
    return $.ajax({
        'type': "POST",
        async:false,
        'url': url
    });
};
$(document).ready(function(){
    var a = null;

    a = getData(url);
console.log(a);
    alert(a);
 });
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

你想&#34;得到&#34;数据,但您对API发出post请求。其次.done是一个异步函数。它将在API向您发送数据时执行。

代码

var url = 'https://api.tiles.mapbox.com/v3/mapbox.geography-class.json';

function getData (url) {
    return $.ajax({
        'type': "get",
        'url': url
    });
};

$(document).ready(function(){
    getData(url).done(function(data){ 
        // here you have access to data
        alert(data)
    });
});