ajax数据在click事件jquery中不起作用

时间:2018-03-13 12:18:43

标签: javascript jquery closures

我希望在第二次点击后显示警报。首先在li然后在div.button

HTML

<li onclick="$(document).ShowPosts(4)"></li>
<div class="button">[show posts]</div>

这个函数有一个内部的ajax调用来检索帖子的数量。 成功使用ajax返回数据后,单击按钮,警报就不会显示。

JQUERY

jQuery.fn.ShowPosts = function(id_user) {
  $.ajax({
     type: 'POST',
     url: "posts.php",
     data: {
       'id_user': id_user
     },
     success: function(data) {
       var total_posts = data;
     });

   $(".button").on('click', function(e) {
       alert(total_posts);
     }
   });
}

看起来来自buttom的click事件无法识别ajax检索到的变量......出了什么问题?

1 个答案:

答案 0 :(得分:2)

当你使用var声明一个函数时,它的作用域只是函数,所以它不能在它之外访问。

因此,您需要在success函数之外声明它并在此函数中设置它。只有这样你才能获得正确的价值。

例如,这不起作用,因为a声明在b函数内:

&#13;
&#13;
function b() {
  var a = 8;
}

b();
console.log(a);
&#13;
&#13;
&#13;

这也是行不通的(a的值不会在b函数范围之外变化)

&#13;
&#13;
var a = 8;
function b() {
  var a = 9;
  console.log('a inside b()', a);
}

b();
console.log('a outside b()', a);
&#13;
&#13;
&#13;

因此,您需要在开始时声明它,并在success回调中覆盖

&#13;
&#13;
var a = 8;
function b() {
  a = 9;
  console.log('a inside b()', a);
}

b();
console.log('a outside b()', a);
&#13;
&#13;
&#13;