我知道SO上有几个类似的问题,我已经用了其中的一些来解决这个问题。我正在尝试列出一组与我的输入值匹配的网址。我有一个servlet,需要一些输入,例如下例中的“aus”并使用out.print()返回一些输出,例如我在下面展示的两个网址。
示例
这正是我想要的。我已经看到尽管已经调用了out.print(jsonString);
,但似乎out.print(jsonString);
正在按预期运行,表明变量'jsonString'包含期望值,但firebug在响应部分似乎没有任何内容。
但是我不确定是什么问题。
-------- jQuery ---------
$(document).ready(function() {
$("#input").keyup(function() {
var input = $("#input").val();
//$("#output").html(input);
ajaxCall(input);
});
});
function ajaxCall(input) {
// alert(input);
$.ajax({
url: "InstantSearchServlet",
data: "property="+input,
beforeSend: function(x) {
if(x && x.overrideMimeType) {
x.overrideMimeType("application/j-son;charset=UTF-8");
}
},
dataType: "json",
success: function(data) {
for (var i = 0, len = datalength; i < len; ++i) {
var urlData = data[i];
$("#output").html(urlData.url);
}
}
});
}
------调用DAO类的Servlet - 返回结果-------
public class InstantSearchServlet extends HttpServlet{
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
System.out.println("You called?");
response.setContentType("application/json");
PrintWriter out = response.getWriter();
InstantSearch is = new InstantSearch();
String input = (String)request.getParameter("property");
System.out.println(input);
try {
ArrayList<String> urllist;
urllist = is.getUrls(input);
String jsonString = convertToJSON(urllist);
out.print(jsonString);
System.out.println(jsonString);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private String convertToJSON(ArrayList<String> urllist) {
Iterator<String> itr = urllist.iterator();
JSONArray jArray = new JSONArray();
int i = 0;
while (itr.hasNext()) {
i++;
JSONObject json = new JSONObject();
String url = itr.next();
try {
json.put("url",url);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
jArray.put(json);
}
String results = jArray.toString();
return results;
}
}
答案 0 :(得分:3)
你必须错过一段时间,在这里:
for (var i = 0, len = datalength; i < len; ++i) {
应该是:
for (var i = 0, len = data.length; i < len; ++i) {
答案 1 :(得分:2)
您的success
处理程序正在尝试引用不存在的变量datalength
。你可能意味着data.length
。
在相同的功能中,您没有在任何地方声明 是的,您是宣布它,我错过了逗号。谢谢,尼克。 len
,因此成为Horror of Implicit Globals的牺牲品。
application/j-son
不是JSON MIME类型。它是application/json
。但是没关系,在任何情况下都没有必要覆盖它。您正在从服务器发送正确的内容类型,并且您还告诉jQuery将其视为JSON,无论服务器说什么。
您在循环的每次迭代中替换 output
元素的内容;你的意思是append
而不是html
?