2013-03-05 123 views
-2

我有两个函数我想在pageinit中一个接一个地触发;首先触发ajax调用,然后将点击函数绑定到<a>元素,但是我的尝试失败了。将2个函数组合起来在pageinit中触发

两个功能如下:

$(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请求将会很好。

+0

'passDataObject'应该是来自ajax的响应? – WooCaSh 2013-03-05 02:34:38

+1

1)从评论看来,问题中没有列出很多要求。 2)目前尚不清楚提问者试图完成什么。人们可以暗示这个问题,所提供的解决方案确实能够“结合”这些功能,但是不会影响到提问者的期望。这些额外的愿望在任何地方都没有澄清,因此我们无法提供解决方案。 3)如果没有明确列出的问题(你说它“不起作用”,我们需要详细信息)和所需的解决方案/要求。我们可以猜出100件事,而不是给你想要的答案。对不起,投票结束。 – AaronLS 2013-03-05 23:10:22

+0

投票基于什么关闭?我提供了所有的信息,组合不起作用,显示没有错误。由于它不工作,我正在寻找一种更好的方式来实现功能组合完成 – 2013-03-06 00:27:18

回答

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()。


所以使用 ,而不是 success失败代替 error

+0

这实际上仍然不起作用。如果我在解除绑定功能之前发出警报,它会触发。然而,如果我将其中一个放入解除绑定中,它将永远不会被触发,因此这些值永远不会被复制。 – 2013-03-05 15:20:44

+0

问题:你能解释一下我,从ajax接收数据后你想做什么?其实我很困惑。 – WooCaSh 2013-03-05 15:40:11

+0

当我从服务器获得我的JSON并且页面准备就绪后,我想每次点击一个''执行一个函数。该函数的功能是从地址栏中获取这个存储的值吗?id = 3' – 2013-03-05 15:50:19

0

Ajax请求作出后这将绑定,但响应的请求后不neccesarily。即因为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不知道你是否打算将其作为响应的一部分。

+0

passDataObject是一个全局变量,但是如果我尝试提醒解除绑定函数内的值,它仍然不会触发 – 2013-03-05 15:23:03

+0

@kern我添加了一条评论和一些代码更改。如果它没有触发,则在注释中放置一个断点,以便您处于成功处理程序的范围内。当它在断点处暂停时,然后在控制台中运行'$(this).find('a')'并查看它找到该元素。它可能无法找到元素。还要注意控制台中的javascript错误,因为堆栈跟踪会显示出问题所在。 – AaronLS 2013-03-05 18:48:29

+0

这不起作用,或者你可以指出我有更好的方式来使用jqm时使用ajax页面的历史,然后看到这个解决方案似乎不起作用。如果可能,请添加历史记录和书签 – 2013-03-05 22:42:51