在jquery中设置数据不会在$ getJson中触发

时间:2012-07-25 23:00:05

标签: ajax asp.net-mvc-3 jquery asp.net-ajax

为什么设置数据在$getJson调用中无效。在getJson调用中未设置WTF变量。另外,另一个问题是无法在$(this).html()调用中设置getJson的原因。我在全局定义了wtf变量,但是我没有从getJson函数中获取值,我想知道为什么数据不可访问。这由ajax函数和async: seto to false解决。我有我的解释,但我希望你的解释,所以提前谢谢。

<script type="text/javascript">
        $(function () { $('a[id=talentNaslov]').before(function () {
             var id = $(this).html();
             var data=null;            
             $.getJSON("url", { id: id  },function (talentNaziv) {  
                    data=talentNaziv; 
// data variable is not set still null and also $(this) is not set when i use it//  
                 });        
            $(this).html(data);
            });
         });
</script>

2 个答案:

答案 0 :(得分:1)

  

为什么设置数据在$ getJson call.WTF变量中不起作用   在getJson调用中设置。

使用getJson设置数据应该可以正常工作,请尝试:

$.getJSON("url", { id: id  },function (data) {  
                  alert(data);
                 });
  

我在全局范围内定义了wtf wariable但它没有从getJson获取值   功能以及无法访问数据的原因。这是由ajax解决的   function和async:seto to false。

这是因为getJson是一个异步调用,这意味着getJson之后的代码(在你的情况$(this).html(data);之后)不会等到执行你设置data的getJson的回调。

所以会发生的是发送获取JSON的请求,而不等待响应,执行下一行代码。这种行为很有用,因为整个程序不会等待通过网络获取内容的相当长的延迟。在您调用$(this).html(data);的情况下,只能保证发送JSON请求,您仍然没有回复,data仍为空。

你尝试过的一个可能的解决方案是将ajax设置为'synchronous',不推荐使用它,jQuery看起来像弃用是因为它确实是一个糟糕的编程习惯。

话虽这么说,解决方案是在将数据导入call back function getJson或您正在使用的异步方法之后移动需要完成的逻辑。

  

另一个问题是为什么$(this).html()无法在里面设置   getJson电话。

getJson有一个回调函数作为它的最后一个参数,你指的是你没有预料到this的函数。

$.getJSON("url", { id: id  },function (talentNaziv) {  
                 //this?? 
                 }); 
  

在JavaScript中,这总是指我们所使用的函数的“所有者”   执行,或者更确切地说,是一个函数是一个方法的对象。

函数的所有者不是你想的jQuery对象$('a[id=talentNaslov]'),所以this没有指向它。

我仍然不明白为什么你以前尴尬地使用,可能会添加你的意图以及问题会得到更具体的答案或更多的解决问题的方法。

<强>更新

根据您对其他答案的评论,您似乎正在寻找类似的内容:

$('a.beforeme').each(function(){
    var $ele = $(this);
    var id = $ele.html();//var id = $(this).html();
    $.getJSON('/echo/json/',{id: id},function(data){
        data = {msg: "this is it"}; // you will not need it
        console.log(data.msg);
        $ele.before(data.msg);
        });
});

小提琴http://jsfiddle.net/PYhhS/1/

答案 1 :(得分:0)

设置数据无效,因为您尝试将数据设置在响应范围之外。另外,作为提示,您可以使用哈希符号通过id识别元素(参见下文)。据我所知,我认为你正在寻找这样的东西:(将响应数据插入链接之前的元素'talentNaslov'?

$.getJSON("url", { id: id  },function (data) {  
    $('a#talentNaslov').before(data));
});        

$(this).html无法在getJson调用中设置,因为“this”现在是对此范围内的ajax(xhr)对象的引用。