选择的值更改无法识别并传递给ajax

时间:2015-01-09 17:09:49

标签: javascript php jquery ajax

我的代码设置如下:

首先选择:

 <select id="select_order">
     <option value="0">Pick One</option>
     <option value="1">Ascending</option>
     <option value="2">Descending</option>
  </select>

在我的javascript中:

var sortv= "database_percent";
var sorto= "asc";
$("#select_order").change(function(){
if (("#select_order").val == 1) {
sortv = "database_percent";
sorto = "asc";
}
else if (("#select_order").val == 2 ){
sortv = "database_percent";
sorto = "desc";
}
else {
alert("Pick something");
}
});

$.ajax({
url: 'all_get_2.php?category=ethnicity',
type: 'GET',
dataType: 'JSON',
data: {sortvalue: sortv ,sortorder:sorto},
})

我希望做的是从下拉列表中选择值,然后将这些新变量(对于sortv和sorto)传递给ajax。 AJAX从我的PHP文件中获取JSON,用于绘制Flot图表。

我将sortv和sorto的变量设置在if ... else代码之上,以便AJAX首先加载一些变量来加载图表(因此它不会抛出错误)。但是,当我选择与select不同的内容时,我会收到与我的ELSE条件相对应的警报。我不知道为什么。

假设我(也就是你)可以解决这个问题,这是否是在AJAX中传递新数据变量的正确方法?如果那些变量是我的.done语句(未显示),我是否真的希望我的图表能够重新绘制?

任何想法都会受到赞赏。

2 个答案:

答案 0 :(得分:1)

使用.val()而不是.val来接收值。 val()是一个可以获取或设置字段值的函数。

此外,您应该在eventhandler函数中使用$(this),因为在您的代码中,您的选择字段会调用该事件,因此您无需通过ID重新选择它:

$("#select_order").change(function(){
    var call = true;
    switch(parseInt($(this).val())) {
        case 1:
            sortv = "database_percent";
            sorto = "asc";
        break;
        case 2:
            sortv = "database_percent";
            sorto = "desc";
        break;
        default:
            call = false;
            alert("Pick something");
        break;
    }

    if(call) {
        $.ajax({
            url: 'all_get_2.php?category=ethnicity',
            type: 'GET',
            dataType: 'JSON',
            data: {sortvalue: sortv ,sortorder:sorto},
            success: function(data) {
                // your response handler here
            }
        });
    }
});

答案 1 :(得分:1)

.val()是一个函数,而不是属性。

所以你需要使用:

$("#select_order").val()

此外,您在选择器之前缺少$。并且您可以在处理程序中使用this.value