-2

我有两个要在 pageinit 触发的函数,一个接一个;首先触发ajax调用,然后将click函数绑定到<a>元素,但是我的尝试失败了。

这两个函数如下:

$(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代替,successfail代替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 回答