0

$getJson为什么设置数据在通话中不起作用。WTF 变量未在getJson调用中设置。另外,另一个问题是为什么$(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>
4

2 回答 2

1

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

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

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

我在全局范围内定义了 wtf wariable,但它没有从 getJson 函数中获取价值,以及为什么数据不可访问。这可以通过 ajax 函数和 async: seto 来解决。

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

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

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

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

另一个问题是为什么 $(this).html() 不能在 getJson 调用中设置。

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

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

在 JavaScript 中,this 总是指我们正在执行的函数的“所有者”,或者更确切地说,指的是函数作为方法的对象。

函数的所有者并不是$('a[id=talentNaslov]')你想象的那个jQuery Object,所以不要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/

于 2012-07-25T23:47:24.387 回答
0

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

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

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

于 2012-07-25T23:10:44.167 回答