Object在发送给函数时给出undefined类型

时间:2013-11-22 04:39:42

标签: javascript ajax json google-chrome firefox

我遇到了一个奇怪的问题。我确定它与变量的范围有关,但我无法弄清楚为什么。这是在Google-Chrome 31.0.1650.57和Firefox 24.0中完成的,代码如下: 第一个template.js(以下部分从template.js的第28行开始)由更改下拉列表触发

    $("select[name=class]").change(function() {
        var subclassSQL = new Array();
        subclassSQL[0] = "`class`, `type`, `subclass`";
        subclassSQL[1] = "subclass";
        subclassSQL[2] = "class";
        subclassSQL[3] = $("select[name=class] option:selected").html();
        splitArr = new Array();
        splitArr[0] = split;
        splitArr[1] = "type";
        call(subclassSQL, "subClass", "div.subClass", (function(){split(); Handlebars.registerHelper("top", function(object) {return new Handlebars.SafeString("<span>Choose your " + object[0].type + ":</span>\n<select name=\"subClass\">");});Handlebars.registerHelper("bottom", function() {return new Handlebars.SafeString("</select>");});}), splitArr, false);
    });

然后触发ajaxCalls.js中的调用函数

function call(SQLarray, source, container, helper, function_, run) {
    $.ajax({
        url: "includes/ajaxHandler.php",
        type: 'post',
        dataType: 'json',
        data: {info: SQLarray},
        success: function(json) {
            var template = Handlebars.templates[source],
                tempData = {base: json}
            console.log(tempData.base);
            if (helper) {helper();}
            if (function_) {
                $(container).html(template(function_[0](function_.slice(1), tempData)));
            } else {
                $(container).html(template(tempData)); }
            if (run) {update(jQuery);}
        }
    }); 
};

function split(field, tempData) {
    console.log(tempData.base);
    return tempData;
};

在调用时在控制台中检查时,第一个console.log(tempData.base);按预期返回一个json对象。但第二次返回

Uncaught TypeError: Cannot read property 'base' of undefined ajaxCalls.js:22
split                                                        ajaxCalls.js:22
(anonymous function)                                          template.js:37
$.ajax.success                                               ajaxCalls.js:11
c                                                             jquery.js:3048
p.fireWith                                                    jquery.js:3160
k                                                             jquery.js:8235
r                                                             jquery.js:8778

function_的调用语法为:

split("type", tempData);

为什么这会返回未定义的?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案!问题是因为混淆的行触发了call函数。

在几行上写出来后,我注意到我调用了spilled();在hepler函数内。但我没有发送任何变数!只需删除split();即可解决问题。这只是表明。排除你的职能是关键。