-2

pageinit で順番に実行したい関数が 2 つあります。最初に ajax 呼び出しを起動し、次にクリック関数を<a>要素にバインドしますが、私の試みは失敗しました。

2 つの機能は次のとおりです。

$(document).on( "pageinit", "#featuredtracks", function( e ) {
var surl =  "http://localhost/musicapp/includes/alltracks.php";
var id = 1;
    $.ajax({
    type: "GET",
    url: surl,
    dataType: "jsonp",
    cache : false,
    jsonp : "onJSONPLoad",
    jsonpCallback: "featuredtrackscallback",
    crossDomain: "true",
    success: function(response) {
    }
    },
    error: function (xhr, status) {           
       alert('Unknown error ' + status);
    }       
 });        
});

$(document).on( "pageinit", "#featuredtracks", function( e ) {
    $(this).find('a').unbind('click').click(function() {
        passDataObject.selectedHref = this.href;
    });
});

それらを組み合わせる正しい方法を得ることができれば、私は感謝しています。最後に、この ajax リクエストを jQuery ajax リクエストに変換するためのチュートリアルを入手できれば、それは素晴らしいことです。

4

2 に答える 2

1

この解決策を試してください:

  $(document).on( "pageinit", "#featuredtracks", function( e ) {
    var surl =  "http://localhost/musicapp/includes/alltracks.php";
    var id = 1;
        $.ajax({
        //rest of code
        }).done(function(data){
            $(this).find('a').unbind('click').click(function() {
               passDataObject.selectedHref = this.href;
            });
        }).fail(function(){
            //when something fail
        })
    });

また、jQueryのドキュメントから:

非推奨通知: jqXHR.success()、jqXHR.error()、および jqXHR.complete() コールバックは、jQuery 1.8 で非推奨になりました。最終的な削除に備えてコードを準備するには、代わりに jqXHR.done()、jqXHR.fail()、および jqXHR.always() を使用してください。


したがって、代わりにdoneを使用し、代わりにsuccess失敗ますerror

于 2013-03-05T02:26:29.767 に答える
0

これは、ajax リクエストが行われた後にバインドされますが、リクエストへの応答後にバインドされる必要はありません。つまり、ajax リクエストが非同期であるためです。

$(document).on( "pageinit", "#featuredtracks", function( e ) {
var surl =  "http://localhost/musicapp/includes/alltracks.php";
var id = 1;
    $.ajax({
    type: "GET",
    url: surl,
    dataType: "jsonp",
    cache : false,
    jsonp : "onJSONPLoad",
    jsonpCallback: "featuredtrackscallback",
    crossDomain: "true",
    success: function(response) {
    }
    },
    error: function (xhr, status) {           
       alert('Unknown error ' + status);
    }       
 });//end ,ajax

 $(this).find('a').unbind('click').click(function() {
        passDataObject.selectedHref = this.href;
    });

});//end pageinit

これにより、リクエストが成功した後にアンカーにバインドされるため、サーバーが ajax リクエストに応答するまで待ちたい場合は、次のようにします。

$(document).on( "pageinit", "#featuredtracks", function( e ) {
var surl =  "http://localhost/musicapp/includes/alltracks.php";
var id = 1;
    $.ajax({
    type: "GET",
    url: surl,
    dataType: "jsonp",
    cache : false,
    jsonp : "onJSONPLoad",
    jsonpCallback: "featuredtrackscallback",
    crossDomain: "true",
    success: function(response) {
         alert('test fire when ajax response succeeds');
         //put a break point here with your browser, then run  $(this).find('a') in console to see if it finds the element
         $(this).find('a').unbind('click'); 
         $(this).find('a').click(function() {
          alert('test fire when clicked');
          passDataObject.selectedHref = this.href;              
      });
    }
    },
    error: function (xhr, status) {           
       alert('Unknown error ' + status);
    }       
 });//end ,ajax
});//end pageinit

ただし、変数 passDataObject がどこから来ているのかわからないので、それを応答の一部にするつもりかどうかはわかりません。

于 2013-03-05T02:28:08.500 に答える