2010-05-27 240 views
2

我被困在車轍中。我希望有人能幫幫忙。將變量傳遞給jQuery AJAX

基本上,我正在用jQuery構建一個AJAX移動web應用程序。我能夠解析一個特定的XML文件,但我想要根據它們被點擊的鏈接來解析其他XML文件,並將它們動態加載到相同的DIV或UL中。

所以:

點擊鏈接1,負載XML1
點擊鏈路2,負載XML2

我希望能夠做到這一切的客戶端,所以沒有PHP(或者是一個壞理念?)。這是我一直在使用的jQuery代碼:

$(document).ready(function() {   

     $("a.load_ajax").click(loadAjax()); 

     function loadAjax() { 
      var fileID = get('?lineID='); 

      var dataID = "xml/" + fileID + ".xml" 

      $.ajax({ 
       type: "GET", 
       url: dataID, 
       dataType: "xml", 
       success: parseXml 
      }); 

      function parseXml(xml) { 
       $(xml).find("train").each(function() { 
        $("ul#ajax-output").append('<li>' + $(this).find("time").text() + '</li>'); 
       }); 
      } 
     }   

}); 

它只是根本不工作。我一直在使用GET在URL中傳遞變量。因此,HTML中的鏈接轉到/?lineID = SBD_to_Union,它應該加載名爲SBD_to_Union.xml的XML文件。

對任何人都有意義嗎?我會很感激一些幫助。

+0

Hrm?如果沒有服務器端代碼,爲什麼查詢參數會影響任何內容? – Matchu 2010-05-27 00:13:25

回答

1

你似乎在掙扎的是從錨中的URL獲取線。使用$(this)獲取點擊鏈接的href屬性。然後,您可以使用正則表達式(如果url如前所述),以移除除構建XML鏈接所用的所有行ID。我認爲XML是服務器端和相對於當前的URL。如果不是,那麼你需要調整路徑。我冒昧地通過內聯函數來壓縮一些東西。 編輯:並且click處理程序應該返回false以防止鏈接實際執行其默認操作。

$(function() {   

    $("a.load_ajax").click(function() { 
     var fileID = $(this).attr('href').replace(/.*?lineID=/,''); 

     var dataID = "xml/" + fileID + ".xml" 

     $.ajax({ 
      type: "GET", 
      url: dataID, 
      dataType: "xml", 
      success: function(xml) { 
       $(xml).find("train").each(function() { 
        $("ul#ajax-output").append('<li>' + $(this).find("time").text() + '</li>'); 
       }); 
      } 
     }); 
     return false; 
    });   
}); 
+0

這樣做,非常感謝! – Scott 2010-05-27 00:47:35

0
<a href="#" id="link1" class="load_ajax">Link1</a> 
<a href="#" id="link2" class="load_ajax">Link2</a> 

您可以根據HREF的ID事物(或其他它的屬性或它的href的值)的事情。

$(function() { 
    $("a.load_ajax").click(loadAjax); 
}); 

function loadAjax() 
{ 
    if ($(this).attr("id") == "link1") 
    { 
    alert("link1"); //load xml1 
    } 
    else 
    { 
    alert("link2"); //load xml2 
    }; 
} 
+0

...如果你有50個鏈接? – 2010-05-27 00:28:18

+0

沒有50個鏈接,在這個例子中只有2個,所以爲什麼要寫50個鏈接解決方案? – CRice 2010-05-27 00:32:10

+0

我認爲蓋比的觀點是,這不是真正的可擴展性...... – bobsoap 2010-05-27 00:36:58

1

您是否檢查過get函數是否返回正確的數據?

添加alert(fileID);get(..);行之後的權利..

但是你爲什麼不創建的網址直接指向XML文件,而不是解析和創建URL上飛?

只是讓HTML中的鏈接指向xml/SBD_to_Union.xml

+0

如果javascript被關閉,則URL可能會使用正確的數據加載其他頁面。無論如何,這是我的假設。 – tvanfosson 2010-05-27 00:36:38

+0

因爲我希望稍後能夠在項目中使用其他XML文件,而不僅僅是這個。 – Scott 2010-05-27 00:38:23

+0

@Scott - 我認爲他建議鏈接href **是一個可以直接使用的XML路徑。 – tvanfosson 2010-05-27 00:40:04

1

乍一看,我覺得你的Ajax()語法是有點過。

您是否因特定原因使用查詢字符串?如果沒有,我會嘗試給HTML鏈接的絕對URL到XML文件,你正在試圖獲取:

<a href="xml/file123.xml"></a> 

那就試試這個:

$("a.load_ajax").click(function(e) { 
e.preventDefault(); 
var url = $(this).attr('href'); 

      $.ajax({ 
       type: 'GET', 
       url: url, 
       dataType: 'xml', 
       success: function(response) { 
        $(response).find('train').each(function() { 
         $('ul#ajax-output').append('<li>' + $(this).find('time').text() + '</li>'); 
       } 
      }); 

     }); 

我沒有測試過這一點,但它應該做你想做的。