当()进入then()时从jQuery获取数据

时间:2015-08-21 13:23:08

标签: jquery

我一直无法理解when()如何传递数据。在此示例中,我需要在when()语句中使用then()中的id。但是,它无法解决。我听说过when()返回延迟的一些事情,但我似乎无法理解如何使用它。

// retrieve the id of selected point from the database, and remove the 
// point
var deletePointByLocation = function (lat, lng) {
    $.when(function () {
        var filters = [
            {
                'name': 'lat',
                'op': 'eq',
                'val': lat
            },
            {
                'name': 'lng',
                'op': 'eq',
                'val': lng
            }
        ];

        $.ajax({
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json'
            },
            url: 'api/datapoints',
            data: {"q": JSON.stringify({"filters": filters})},
            dataType: "json",
            type: 'GET'
        })
    }).then(function (data) {
        var idx
        $.ajax({
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json'
            },
            url: 'api/datapoints/' + idx,
            type: 'DELETE'
        })
    }).done(function () {
        var point = new google.maps.LatLng(lat, lng);
        _.forEach(mapCircles, function (circle) {
            if (circle.getCenter().equals(point)) {
                circle.setMap(null);
                var idx = mapCircles.indexOf(circle);
                mapCircles.splice(idx, 1);
                num--;
            }
        });
        toggleInfoDisplays();
    })
};

1 个答案:

答案 0 :(得分:0)

idxundefined处显示url: 'api/datapoints/' + idx

$.ajax()return$.when()来电未被.done()调用?

mapCircles似乎未在.done()定义?

尝试

var deletePointByLocation = function (lat, lng) {
    // add `return` before `$.when()` 
    return $.when(function () {
        var filters = [
            {
                'name': 'lat',
                'op': 'eq',
                'val': lat
            },
            {
                'name': 'lng',
                'op': 'eq',
                'val': lng
            }
        ];

       return $.ajax({
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json'
            },
            url: 'api/datapoints',
            data: {"q": JSON.stringify({"filters": filters})},
            dataType: "json",
            type: 'GET'
        })
    }).then(function (data) {
        var idx; // what is `idx` ?
        // add `return` before `$.ajax()`
        return $.ajax({
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json'
            },
            url: 'api/datapoints/' + idx, // what is `idx` ?
            type: 'DELETE'
        })
    }).done(function () {
        var point = new google.maps.LatLng(lat, lng);
        // what is `mapCircles` ?
        _.forEach(mapCircles, function (circle) {
            if (circle.getCenter().equals(point)) {
                circle.setMap(null);
                var idx = mapCircles.indexOf(circle);
                mapCircles.splice(idx, 1);
                num--;
            }
        });
        // what is `toggleInfoDisplays` ?
        toggleInfoDisplays();
    })
};