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.

    评论

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?