2010-05-27 136 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>'); 
       } 
      }); 

     }); 

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