我正在玩一个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
为什么选择器找不到元素,我该如何解决?
答案 0 :(得分:2)
通过在调用函数前添加$来解决问题。
自:
(function() {
console.log('running');
$('#fileList').get('car/ford');
})();
要:
$(function() {
console.log('running');
$('#fileList').get('car/ford');
});
答案 1 :(得分: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);
}
});
}
更新
应该在document.ready
上实例化对get函数的调用,这可以通过简单地添加$
更改
(function() {
console.log('running');
$('#fileList').get('car/ford');
})();
要
$(function() {
console.log('running');
$('#fileList').get('car/ford');
})();
答案 2 :(得分: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()
变量发生冲突。