由于切换,无法读取未定义的属性“已完成”

时间:2015-03-16 22:28:12

标签: javascript jquery ajax

我有一个通过ajax获取数据的函数。问题是构造开关导致此错误:

cannot read property 'done' of undefined

我不知道为什么......

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
function changeSelect(input,type)
{
	var out;
	switch(type)
	{
		case "sport" :  out=$.post("/ajax/ajax.php",{sport:input.value});
		case "competition" :out=$.post("/ajax/ajax.php",{competition.value});
	}
	out.done(function(data)
	{
		$("#output").html(data);
	});
}</script>
谢谢你的回答。

1 个答案:

答案 0 :(得分:3)

您遇到错误的可能原因是type的值与您的case语句中的任何一个都不匹配。因此,out仍为undefined,并为您提供错误。

此外,如果您的break;语句和case:无效,则必须使用{competition.value}语句。也许你想要这样的东西:

function changeSelect(input, type) {
    var out;
    switch (type) {
        case "sport":
            out = $.post("/ajax/ajax.php", {sport: input.value});
            break;
        case "competition":
            out = $.post("/ajax/ajax.php", {sport: competition.value});
            break;
        default:
            break;
    }
    if (out) {
        out.done(function(data) {
            $("#output").html(data);
        });
    }
}

我不确切地知道你对{competition.value}的意思。我猜想也许你希望它是{sport: competition.value},但我没有看到competition定义在任何地方,所以我不太确定。


或者,也许删除一些重复的代码并使用它:

function changeSelect(input, type) {
    var val;
    switch (type) {
        case "sport":
            val = input.value;
            break;
        case "competition":
            val = competition.value;
            break;
        default:
            break;
    }
    if (val) {
        $.post("/ajax/ajax.php", {sport: val}).then(function(data) {
            $("#output").html(data);
        });

    }
}