getJSON调用格式为servlet问题

时间:2011-04-08 20:20:01

标签: servlets jquery

您好我正在使用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=&3"

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

4 个答案:

答案 0 :(得分:2)

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

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

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

我还建议在循环之前抓住$("#reports")作为var,这样效率会提高一点。

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

答案 1 :(得分:2)

getJSON调用需要有效的JSON(有效的JSON在周围有引号,唯一的例外是值为数字。您的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”并在success函数中使用此代码:

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

答案 2 :(得分:1)

也许:

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

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

参数是:url,data(map或string),callback。

这是一种&符号(&amp;)用于连接作为字符串(3)传递的url + paramenter。结果你有:recentUploaded?conID =&amp; 3

答案 3 :(得分:1)

你不能以这种方式使用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

删除&amp;使用:     $ .getJSON(“recentUploads?conID =”+ selected.val(),function(data){

或:

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