Jquery变量范围问题

时间:2014-12-12 21:08:08

标签: jquery

我认为我在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;
});

2 个答案:

答案 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评论)

//!!