我有这个jquery代码与我
$('.parent').livequery('change', function() {
$(this).parent('.show_sub_categories').append('<img src="nlevel_ajax_dropdown/loader.gif" style="float:left; margin-top:7px;" id="loader" alt="" />');
$.post("nlevel_chid_categories.php", {
parent_id: $(this).val(),
}, function(response){
var ref = $(this).parent('.show_sub_categories');
setTimeout("finishAjax('show_sub_categories', '"+escape(response)+"','"+ref+"')", 400);
});
return false;
});
});
function finishAjax(id, response,ref){
$('#loader').remove();
$(ref).append(unescape(response)); // and this is giving error
}
我想要做的是在ajax完成时调用finishAjax函数并将结果追加到触发事件的元素的父元素,所以我尝试通过var ref = $(this).parent('.show_sub_categories');
获取其父元素的引用并将其与finishAjax
调用setTimeout
函数,但这会导致jquery错误。
以下是actuall错误消息:
Syntax error, unrecognized expression: [object Object]
(function(e,t){function _(e){var t=M[e...y",[],function(){return v})})(window);
答案 0 :(得分:1)
您可以使用.done()
执行此操作,而不是向post
添加额外参数。此外,匿名函数更容易调试,尤其是当您需要以setTimeout
语法传递参数时。试试这个:
$('.parent').livequery('change', function() {
var ref=$(this).parent('.show_sub_categories');
ref.append('<img src="nlevel_ajax_dropdown/loader.gif" style="float:left; margin-top:7px;" id="loader" alt="" />');
var ajaxPost = $.post("nlevel_chid_categories.php", {
parent_id: $(this).val()
});
ajaxPost.done(function(response){
setTimeout(function(){
finishAjax('show_sub_categories', response, ref);
}, 400);
});
return false;
});
编辑:调整后的ref
定义,将其全部用于response
部分中未转义的.done
版本。
此外,ref
中传递的finishAjax
已经是一个选择器,因此此时应该直接访问它:
function finishAjax(id, response, ref){
$('#loader').remove();
ref.append(response);
}