我有一个使用javascript事件“onchange”的工作代码:
<select id="mySelect" onchange="change_table(this)">
jquery:
unction change_table(elem) {
var adressesInfo;
$.ajax({
type: "POST",
url: "test.php",
data: {id: elem.value},
success: function(data){
adressesInfo = jQuery.parseJSON(data);
},
async: false
});
和php:
$data = array();
[...]
print json_encode($data);
这很好。
现在我想做同样的事情,但在第二个元素上使用onclick事件:
$(function(){
$("th").on('click', function(e){
change_table($('#mySelect')[0].value);
});
})
(这可能没有多大意义,但这仅仅是为了示例)
当我这样做时,我收到错误Uncaught SyntaxError: Unexpected token <
我对为什么它可以用于onchange事件而没有onclick事件感到有点困惑,有什么区别?我是jquery / ajax的新手。
感谢您的帮助。
答案 0 :(得分:1)
您的change_table
函数需要一个可以从(data: {id: elem.value}
)获取值的元素。所以在第二种情况下,你应该直接提供mySelect
:
$("th").on('click', function(e){
change_table($('#mySelect')[0]);
});
答案 1 :(得分:0)
$("th").click(function(){
change_table($('#mySelect')[0].value);
});
请试一试。
答案 2 :(得分:0)
看起来你的错误是jQuery尝试解析PHP的HTML输出,这可能意味着你的后端会引发错误,可能是因为发布了错误的数据。
您的原始change_table
函数将元素作为其唯一参数,在最后一个示例中,您将向其传递已评估的字符串。也许这就解释了为什么错误的数据会传送到您的服务器。
除此之外:没有必要在jQuery中显式解析json。您可以在ajax设置中使用dataType: 'json'
,并将反序列化的json传递给您的success
处理程序。如果失败,则error
处理程序将触发。