JavaScript和范围问题

时间:2016-01-08 01:22:36

标签: javascript ajax button scope click

我在使用jquery调用ajax请求时遇到问题。 我这样做的顺序是:

  1. 点击按钮
  2. 做ajax post
  3. 当ajax请求完成时,我调用一个超出范围的函数。
  4. 由于某种原因并且怀疑它与我在点击回调中的事实有关,即加载功能超出了范围。但我甚至没有看到console.log消息。但我确实看到了ajax电话。

    有什么想法吗?也许我这样做是错误的???

    这是原型代码,类似于我正在尝试做的事情:

    $(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
                });
            }
    });
    

    这是我正在尝试使用的实际代码

    (文档)$。就绪(函数(){

        // 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
        });
    }
    

    });

    提前致谢!

2 个答案:

答案 0 :(得分:0)

Zip必须被调用。

确保您的服务器响应具有.always()之类的正确标头。响应正文是有效的JSON。

答案 1 :(得分:0)

您的index.html的代码可能无效JSON