我认为我在jquery中遇到了变量范围问题。我在下面调用refid
的变量是在更高级别的函数中返回初始警报中的有效值..." like69"是我的预期价值。
然而,在成功功能中,它无法正常工作。我希望它返回相同的" like69",但是在较低级别的警报中,它给了我"成功"。在.switchClass
行,它不起作用并抛出一个未定义的错误。
关于我出错的地方的任何提示......如何让这个价值流过?
$(".ajax-like").submit(function(){
alert("Initial part going...");
var refid = $(this).find('input[name="refid"]').val();
alert(refid);
var data = {
"action": "like"
};
data = $(this).serialize() + "&" + $.param(data);
$.ajax({
type: "POST",
dataType: "json",
url: "galleryajax.php", //Relative or absolute path to response.php file
data: data,
success: function(data, refid) {
alert("Form submitted successfully.\nReturned json: " + data["json"]);
alert(refid);
$('#'+refid).switchClass("thumb-comment", "thumb-comment2", 1000);
}
});
return false;
});
答案 0 :(得分:2)
从AJAX响应处理程序中删除该变量:
success: function(data) {
alert("Form submitted successfully.\nReturned json: " + data["json"]);
alert(refid);
$('#'+refid).switchClass("thumb-comment", "thumb-comment2", 1000);
}
...因为它已经在处理程序的范围内(refid
变量在外部函数中定义。)
以下是:success
选项对象的$.ajax
属性中指定的函数将使用三个参数调用:
data
(回复)textStatus
(响应状态的字符串描述)jqXHR
(类似承诺的AJAX对象)您将处理程序描述为获取两个参数的函数,但在JS中这很好。问题是,您将refid
声明为函数参数 - 并且使用此参数,您实际上在refid
范围内创建了一个名为success
的新变量(名称绑定,确切地说)。该变量将影响外部变量。这就是你在警告中显示'success'
字符串的原因。
答案 1 :(得分:1)
第二个选项:使用context
的{{1}}参数,并将该元素提供给回调函数。例如(注意下面的$.ajax
评论)
//!!