【问题标题】:Setting data in jquery does not trigger in $getJson在 jquery 中设置数据不会在 $getJson 中触发
【发布时间】:2012-07-25 23:00:04
【问题描述】:

为什么设置数据在$getJson 调用中不起作用。 getJson 调用中未设置 WTF 变量。另外,另一个问题是为什么不能在getJson 调用中设置$(this).html()。我在全局范围内定义了 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>

【问题讨论】:

  • 您认为“之前”会如何运作?数据的问题在于它是异步设置的,但您正在同步访问它。
  • 你的意思是同步调用的顺序是什么?
  • 我已经添加了一些解释
  • 请查看更新后的答案

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


【解决方案1】:

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

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

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

我在全局范围内定义了 wtf wariable,但它没有从 getJson 中获得价值 功能以及为什么无法访问数据。这是通过ajax解决的 函数和异步:设置为 false。

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

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

您尝试过的一个可能的解决方案是将 ajax 设置为 'synchronous' ,不建议这样做,而且 jQuery 看起来要弃用了,因为它确实是一种糟糕的编程习惯。

话虽如此,解决方案是将获取数据后需要完成的逻辑移动到getJsoncall back function或您正在使用的异步方法中。

还有一个问题是为什么$(this).html()里面不能设置 getJson 调用。

getJson 有一个回调函数作为它的最后一个参数,你指的是这个函数,你有 this 出乎意料。

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

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

函数的所有者并不是你想象的那个jQuery Object $('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/

【讨论】:

  • 当我说设置数据时,我的意思是在 getjson 调用 byits 响应中设置 wtf 变量,我无法在回调函数中移动逻辑,因为它需要 id 作为参数,我通过解析“a”的所需 ID 获得标签
  • 你检查更新部分了吗,我已经将'this'保存在$ele中,所以你可以访问jsonCall中的相应'a'作为$ele。 $ele = 对应的 'a'。
  • 像魅力一样工作;)你能解释一下这个 var $ele 它是什么参考或者我的意思是它在 geJson 函数中是可访问的,而 $(this) 不是...tnx u 非常: )
【解决方案2】:

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

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

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

【讨论】:

  • 我在页面中有多个相同 id 的 takgs,它们的 html 和 href 不同。我使用此功能来更改它们的 html,即带文本的 ID 号。如果我使用您的代码,它将为它们中的每一个设置最后一个值,这就是为什么我想使用它来区分一个值。问题是即使我使用全局变量,$this 也不能在 getJson 调用中使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-07
  • 2010-09-06
  • 2011-03-11
  • 2014-05-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多