0

$getJson通話中にデータの設定が機能しない理由。WTF変数がgetJson呼び出しで設定されていません。また、別の問題は、なぜコール$(this).html()内に設定できないのかということです。getJsonwtf変数をグローバルに定義しましたが、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をグローバルに警告可能と定義しましたが、getJson関数から値を取得せず、データにアクセスできない理由を説明しました。これは、ajax関数とasync:setoをfalseに設定することで解決されます。

これは、getJsonが非同期呼び出しであるためです。つまり、getJsonの後のコードは、$(this).html(data);設定したgetJsonのコールバックdataが実行されるまで待機しません。

つまり、JSONを取得するためのリクエストが送信され、応答を待たずに次のコード行が実行されます。この動作は、プログラム全体がネットワーク経由でコンテンツをフェッチする際に比較的長い遅延を待たないため、役立ちます。その時点$(this).html(data);で呼び出された場合、JSONのリクエストが送信されることのみが保証されますが、応答dataはなく、nullのままです。

あなたが試した1つの可能な解決策は、ajaxを「同期」として設定することです。これは推奨されておらず、jQueryは非推奨になるように見えます。

そうは言っても、解決策は、データを取得した後に実行する必要のあるロジックcall back functiongetJsonまたは使用している非同期メソッドを移動することです。

また、別の問題は、getJson呼び出し内で$(this).html()を設定できない理由です。

getJsonには、最後の引数としてコールバック関数がありますthis。予期しない場所でこの関数を参照しています。

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

JavaScriptでは、これは常に、実行している関数の「所有者」、つまり関数がメソッドであるオブジェクトを指します。

$('a[id=talentNaslov]')関数の所有者は、あなたが思うようにjQueryオブジェクトではないので、それ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で要素を識別することができます(以下を参照)。私の知る限り、あなたは次のようなものを探していると思います:(「talentNaslov」のIDを持つリンクの前に要素として応答データを挿入しますか?

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

$(this).htmlはgetJson呼び出し内に設定できません。これは、「this」がこのスコープ内のajax(xhr)オブジェクトへの参照であるためです。

于 2012-07-25T23:10:44.167 に答える