2013-03-05 22 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

相關問題