weixin_33737774 2016-01-08 01:22 采纳率: 0%
浏览 38

JavaScript和范围问题

I have an issue with calling ajax request with jquery. The order that I'm doing this in is:

  1. click the button
  2. do ajax post
  3. when the ajax request is finished I call a function that is out side the scope.

For some reason and supecting that it has to do with the fact that i am in the on click callback that the load function is out of scope. But I don't even see the console.log message either. But I do see the ajax call.

Any ideas? Maybe I'm doing this the wrong way???

Here's the prototype code that resembles what I'm trying to do:

$(document).ready(function(){

        $('#button').on('click',function(evt){
            var data = {};

            ajax('index.html', data).done(function(){
                console.log('Fire Please'); // this does not fire after the ajax call!!!
                    load(); // this does not fire after the ajax call!!!

            });
        });

        function load(){
            // do another ajax call and add to the dom
        }

        function ajax(url, data){
            return $.ajax({
                url: url,
                type: 'post',
                dataType: 'json',
                data: data
            });
        }
});

And Here's the Actual Code I'm trying to use

$(document).ready(function(){

    // add onclick event to the Add Unit Button
addUnitButt.on('click', function(evt){
    var data = {
        id: id,
        dept_no: dept_no.val(),
        dept: dept.val()
    };

    evt.preventDefault();

    dept.val('');
    dept_no.val('');
    $(this).prop('disabled', true);


    ajax('index.html', data).done(function(){
        load();
    });

});

function load(){
    var data = {
        id: 575
    };

    // show loading
    showLoading();

    // reset the table dom
    $("#listTable").find("tr:gt(0)").remove();

    // do initial load of the list data
    ajax('index.html', data)
    .done(function(units){
        var data = toJSONObject(units);

        for(var x = 0; x < data.length; x++){
            if((x & 1) == 0){
                addRow(data[x], data.length, 'odd');
            }else{
                addRow(data[x], data.length, 'even');
            }
        }

        // hide loading
        hideLoading();
    });
}

// ajax function to call for data
function ajax(url, data){
    return $.ajax({
        type: 'POST',
        data: data,
        dataType: 'json',
        url: url
    });
}

});

Thanks in advance!

  • 写回答

2条回答 默认 最新

  • from.. 2016-01-08 01:44
    关注

    .always() must be called.

    Make sure your server response have the right headers like Content-Type. And the response body is valid JSON.

    评论

报告相同问题?

悬赏问题

  • ¥15 BDSBAS-B1C和B1C信号有什么不同
  • ¥15 在半圆平面内随机生成点坐标
  • ¥15 系统容量变化的几种多址方式TDMA, CDMA,FDMA,OFDMA 对比,应该给的是一个曲线 图,随着系统容量的增加,几种多址方式性能的对比 图,MATLAB程序仿真折线图
  • ¥15 用visual Studio 写c ++只运行上一个旧代码的运行结果是怎么回事
  • ¥15 系统容量变化的几种多址方式(TDMA,FDMA,OFDMA,CDMA)对比(相关搜索:曲线图)
  • ¥15 worldclim 历史及未来气候数据矫正
  • ¥15 ajax服务器不能下载
  • ¥15 运用c++和opencv实现二维码的识别和三维坐标的建立
  • ¥100 理想汽车的ADB为什么到了国外换了SIM就可以打开?
  • ¥15 k210烧入flash报错error:2005