【问题标题】:getJSON calling format to servlet problemgetJSON调用格式到servlet问题
【发布时间】:2011-04-08 20:20:01
【问题描述】:

您好,我正在使用 Jquery getJSON 向 servlet 发送查询参数。 servlet URL 自己工作: http://localhost:8080/pgViking/recentUploads?conID=2

它给出以下输出:

{reports:[{filename:"CSVFile_2010-06-16T11_54_53.csv"},
        {filename:"CSVFile_2010-06-16T11_54_53.csv"}, <br />
        {filename:"PRJ20142_05_10_2008.zip"}]}

但是,我无法从 jQuery 获得正确的响应。 这是它的代码:

$(document).ready(function(){

      $("#cons").change(function(){
            var selected = $("#cons option:selected");
            // getJSON("servlet Name", Selected Value  2, 3, function to show result, callback function
            $.getJSON("recentUploads?conID=", selected.val(), function(data){
                $("#reports").contents().remove();
                    $.each(data.reports, function(index,rpt){
                    // add items to List box
                    $("#reports").append("<option>" + rpt.filename + "</option");
                    } //end function
                    ); //end of each

            }); // getJSON
        }); // change
     });

html部分:

        <select Name="eCons" size="1"  id="cons">
                <option value="select consultant">Select Consultant</option>
                <option value="4">A</option>
                <option value ="2">B</option>
                <option value="3">Br</option>
                <option value ="21">D</option>
                <option value="20">G</option>
                <option value="24">T</option>
        </select>
        <br />
        <br />
        <select id="reports" style ="width:200px">
        </select>

当我在 firebug 中调试它时,我发现我的 URL 不正确,但我不确定 如果这是唯一的问题:
url="recentUploads?conID=&amp;3"

任何帮助将不胜感激, 谢谢,

【问题讨论】:

  • 我想你的意思是$(data.reports).each(function())

标签: servlets jquery


【解决方案1】:
$("#reports").append("<option>" + rpt.filename + "</option");

这是无效的。结束标记 &gt; 不仅丢失了,而且根本不会创建真正的 HTML 元素。使用$("&lt;option&gt;") 让jQuery 创建一个真正的HTML &lt;option&gt; 元素。

$("#reports").append($("<option>").text(rpt.filename));

我还建议在循环之前将$("#reports") 保留为var,这样效率更高。

您可以在this answer 中找到更多示例。

【讨论】:

    【解决方案2】:

    getJSON 调用需要有效的 JSON(有效的 JSON 在 keysvalues 周围有引号,唯一的例外是数字值。servlet 的输出应该看起来像这样:

        {
            "reports": [
                {
                    "filename": "CSVFile_2010-06-16T11_54_53.csv" 
                },
                {
                    "filename": "CSVFile_2010-06-16T11_54_53.csv" 
                },
                {
                    " filename": "PRJ20142_05_10_2008.zip" 
                } 
    
    
      ]
    
    }
    

    否则,您可以使用 jQuery ajax 调用,将 dataType 属性值设置为“text”并在成功函数中使用此代码:

    var myObject = eval('(' + myJSONtext + ')')
    

    【讨论】:

      【解决方案3】:

      你不能以这种方式使用 jQuery.each 函数。 http://api.jquery.com/each/

                      for(i in data.reports){
                      // add items to List box
                      $("#reports").append("<option>" + data.reports[i].filename + "</option");
                      ); //end of loop
      

      删除和使用: $.getJSON("recentUploads?conID="+selected.val(), function(data){

      或:

      $.getJSON("recentUploads",{conID:selected.val()}, function(data){
      

      【讨论】:

      • 它在哪里说您不能在该页面上以这种方式使用$.each?我经常这样使用它并取得了巨大的成功,减去了我上面提到的错字。
      • 描述:遍历一个 jQuery 对象,为每个匹配的元素执行一个函数。 .each( function(index, Element) )
      • 您意识到 jquery 对象不仅仅是 DOM 节点,对吧?见:jQuery Object
      • 是的,你可以。这个用法没api
      • 我认为这两个循环都是有效的。 EACH 和 FOR。为了使用 FOR 循环,该元素不应有任何空值。
      【解决方案4】:

      也许:

              $.getJSON("recentUploads", { 'conID': selected.val()}, function(data){
                 $("#reports").contents().remove();
      

      http://api.jquery.com/jQuery.getJSON/

      参数有:url、数据(地图或字符串)、回调。

      这是使用与号 (&) 连接作为字符串 (3) 传递的 url + 参数的方式。结果你有:recentUploaded?conID=&3

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-25
        • 2013-06-26
        • 2010-11-06
        • 2012-01-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多