将变量传递给jQuery AJAX

时间:2010-05-27 00:11:32

标签: javascript jquery ajax

我陷入了困境。我希望有人可以提供帮助。

基本上,我正在使用jQuery构建一个AJAX移动Web应用程序。我能够很好地解析特定的XML文件,但是我希望该选项能够根据点击的链接解析其他XML文件,并将它们即时加载到同一个DIV或UL中。

所以:

点击Link1,加载XML1
单击Link2,加载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传递变量。因此,HTML中的链接转到/?lineID = SBD_to_Union,它应该加载名为SBD_to_Union.xml的XML文件

对任何人都有意义吗?我很感激一些帮助。

4 个答案:

答案 0 :(得分:1)

您似乎正在努力的是从锚点中的网址获取行。使用$(this)获取所点击链接的href属性。然后,如果url如上所述,您可以使用正则表达式删除除用于构造XML链接的行ID之外的所有内容。我假设XML是服务器端并且相对于当前url。如果没有,那么你需要调整路径。我已经冒昧地通过将函数内联来压缩一些东西。 修改:并且点击处理程序应返回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;
    });          
});

答案 1 :(得分:1)

您是否检查过get函数是否返回了正确的数据?

alert(fileID);行之后添加get(..); ..

但是为什么不创建直接指向xml文件的url而不是动态解析和创建url?

只需将html中的链接指向xml/SBD_to_Union.xml

即可

答案 2 :(得分:1)

乍一看,我认为你的ajax()语法稍微偏离了。

您是否因特殊原因使用查询字符串?如果不是,我会尝试为HTML链接提供您尝试获取的XML文件的绝对URL:

<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>');
                }
            });

        });

我没有测试过这个,但它应该做你想要的。

答案 3 :(得分: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
  };
}