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); と、すべてが正常に機能します。

したがって、これら 2 つのセレクターには違いがあります。
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

次のことを試すことができます。

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 に答える
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 に答える