0

我正在制作一个 REST api,并且正在开发一些 javascript 函数。
这里的想法是运行例如:$('#main').get('car/ford');并且返回的数据将被添加到提供的元素中。

这是所有的javascript:

$.fn.extend({
    get: function (path) {
        request(this, 'GET', path);
    }
});

function request(element, type, path) {
var dees = $(element);
    $.ajax({
        type: type,
        url: '/request/'+path,
        success: function(data) {
            console.log('Success');

            a = $(element);
            b = $('#fileList'); // this is a control

            dees.html(data);
        }
    });
}

(function() {
    console.log('running');
    $('#fileList').get('car/ford');
})();

我遇到的问题是,当我运行时,a.html(data);
什么都不会改变。但是,如果我运行b.html(data); 一切都应该正常运行。

所以这两个选择器之间是有区别的。
在 a 上找不到元素 a.length == 0
在 b 上找到元素 b.length == 1

为什么选择器找不到元素,我该如何解决?

4

3 回答 3

2

通过在调用函数前添加 $ 解决了该问题。

从:

(function() {
    console.log('running');
    $('#fileList').get('car/ford');
})();

到:

$(function() {
    console.log('running');
    $('#fileList').get('car/ford');
});
于 2012-09-22T18:48:42.783 回答
1

更改element$(element)

当请求被调用时,request(this, 'GET', path);这代表 javascript 对象,它应该是 jQuery 对象。您需要像我一样传递 jquery 对象或将其转换为 jquery 对象。

$.fn.extend({
    get: function (path) {
        alert(this.tagName);
        var objToPass = $(this);  
        request(objToPass, 'GET', path);
    }
});
function request(javascriptObj, type, path) {  
    element = $(javascriptObj);   
    $.ajax({
        type: type,
        url: '/request/'+path,
        success: function(data) {
            console.log('Success');

            a = $(element);
            b = $('#fileList'); // this is a control

            a.html(data);
        }
    });
}

更新

应该实例化对 get 函数的调用,document.ready这可以通过简单地添加 $ 来完成

改变

(function() {
    console.log('running');
    $('#fileList').get('car/ford');
})();

$(function() {
    console.log('running');
    $('#fileList').get('car/ford');
})();
于 2012-09-22T18:28:54.160 回答
1

您可以尝试以下方法:

function request(element, type, path) {
   var dees = $(element);
   $.ajax({
           type: type,
           url: '/request/'+path,
           success: function(data) {
               console.log('Success');
               dees.html(data);
           }
   });
}

如果变量与块$(this)自己的变量冲突。$(this)ajax()

于 2012-09-22T18:31:50.477 回答