jQuery AJAX - 成功函数范围 - 传入'this'

时间:2012-10-02 10:37:05

标签: jquery ajax scope

努力让我了解AJAX的成功范围。

我正在尝试从AJAX调用加载一些数据,然后使用jQuery将其附加到已存在的ul

example帮助了我,但我无法弄清楚如何引用'this'中的特定元素。

所以我已将this作为that传递给成功函数,但是这一行:

$('li.loading').before(nextLoad);

失败:

Uncaught Error: NOT_FOUND_ERR: DOM Exception 8 

我假设,我需要使用that跟随我的元素,但无法解决语法问题。

                  var that = this;

                  $.ajax({
                        type: 'GET',
                        url: url,
                        async: true,
                        jsonpCallback: 'callback',
                        contentType: "application/json",
                        dataType: 'jsonp',                      
                        success: function(data) 
                        {                                   

                             $.each(data.products, function(key, val) 
                             {                                
                                items.push('<li class="product"><a href="product.html"><span class="store-badge"></span><img src="'+val.image+'" width="124" height="166" /><h3>'+val.title+'</h3></a></li>');                                  
                             });

                             var nextLoad = items;  

                             if (loadNumber <= 4) {
                                 $('li.loading').before(nextLoad);
                             };
                             if (loadNumber >= 4) {
                                 $('li.loading').hide();
                             };

                             $('.scroll-horizontal').mCustomScrollbar("update");                            

                        },
                        error: function() {
                            console.log('failed');
                        }
                        });                  

编辑:

导致以下内容的控制台日志记录:

Window
Infinity: Infinity
$: function (a,b){return new e.fn.init(a,b,h)}
Array: function Array() { [native code] }
ArrayBuffer: function ArrayBuffer() { [native code] }
Attr: function Attr() { [native code] }
Audio: [object Function]
AudioProcessingEvent: function AudioProcessingEvent() { [native code] }
BeforeLoadEvent: function BeforeLoadEvent() { [native code] }
Blob: function Blob() { [native code] }
Boolean: function Boolean() { [native code] }
//CONTIUNES

控制台记录nextload也会导致

Uncaught Error: NOT_FOUND_ERR: DOM Exception 8 

2 个答案:

答案 0 :(得分:1)

您正在将数据推送到items

items.push('<li class="product"><a href= ......

这表明items实际上是一个数组?

然后你做:

var nextLoad = items;  

nextLoad有效地转换为数组。

现在,当你想要做的时候:

$('li.loading').before(nextLoad);

您正在尝试在具有li类的.loading元素之前插入数组,并且由于DOM确实不支持将数组插入其中,因此会出现错误。

答案 1 :(得分:0)

var that = $(this);

试试这个jquery