Javascript getJSON没有返回值

Javascript getJSON没有返回值,javascript,return-value,getjson,Javascript,Return Value,Getjson,当我运行此命令时,不会触发带有“success”的警报。我与firebug进行了检查,它告诉我ret未定义。这是什么意思 function checkUni() { var URL = "http://localhost:8080/GradSchoolApp/test.jsp"; var ret = $.getJSON(URL, function(data, textStatus) { alert("success"); }); } 编辑: 这是test.jsp顺便说一句 <

当我运行此命令时,不会触发带有“success”的警报。我与firebug进行了检查,它告诉我ret未定义。这是什么意思

function checkUni() {

var URL = "http://localhost:8080/GradSchoolApp/test.jsp";

var ret = $.getJSON(URL, function(data, textStatus) {
    alert("success");
});
}
编辑:

这是test.jsp顺便说一句

<%@ page language="java" contentType="application/json; charset=ISO-8859-1"
pageEncoding="ISO-8859-1" import="java.util.*, net.sf.json.JSONObject"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
response.setContentType("application/json");
JSONObject jo = new JSONObject();
jo.put("location", "1");
jo.put("name", "someUni");
out.println(jo);
out.flush();

%>
</body>
</html>

在此处插入标题

ret
的作用域是您的函数,因此只有函数中的代码才能访问它。我的猜测是,您没有在本地计算机的8080端口上运行web服务器,或者URL因其他原因无效。如果您还想获得错误的回调(),请尝试
.ajax


您可能也想检查json,警告说它将在inavlid json上以静默方式失败,包括引用属性名等严格要求,您可以尝试使用
.get
并反序列化自己。

AJAX调用不起作用。要检查几点,URL是否正确?您是否检查了应用程序服务器日志以查看呼叫是否已到达。如果AJAX调用成功,是否可以检查firebug的HTTP代码

编辑:

(从text/json改为application/json)谢谢Bergi

JSP:

首先检查是否返回json数据的“.jsp”文件

使用一个以上的参数进行回调

getJSON: function( url, data, callback ) {
    return jQuery.get( url, data, callback, "json" );
}
像这样的用户

function checkUni() {
    var URL = "http://localhost:8080/GradSchoolApp/test.jsp";
    var ret = $.getJSON(URL,"",function(data){
        alert("success");
    });
}


好吧,这很奇怪。所以警报没有被触发,我也不知道为什么。我已经看过很多例子和jQuery文档,但我就是不明白。你能给我一个简单的解释这是如何工作的吗?当我用这个替换我的代码时。它打印成功,但“数据”中充满了html,而不仅仅是json对象。当然,您不允许从jsfiddle.net(同源策略)访问本地主机。是的,删除了该注释。看第二个,好的。我用var s=“test”插入了另一行;然后我可以看到ret被定义了,它的responseText包含html和json对象文本。但是我想使用数据,那不是应该是json对象吗?请显示responseText。是的,它应该是一个JSON对象(根据jQueryAPI getJSON()…),但是Java对应方法是否也发出相同的响应?i、 e.JSON alsoI打印了ret.responseText,它看起来像这样:“在这里插入标题{“位置”:“1”,“名称”:“航空大学”}”这与我的数据参数相同吗?如果是,我的test.jsp有问题吗?是的,我认为问题在于您的jsp,我认为有效的JSON响应应该是这样的:“{”location:“1”,“name:“Air University”}”如果您使用的是Struts,您需要将响应类型设置为JSON,而不是按照您提供的HTML。当我添加第一段代码时,带有脚本的整个文件从firebug中的“scripts”中消失……当我在浏览器中打开test.jsp时,我得到:{“location”:“1”,“name”:“Air University”}这就是我应该得到的,对吗?你会在数据对象中得到,我在上面的代码段中给出了它,我不在后面。什么东西?很抱歉,我想我对语法还不是很在行……看看这个Fiddle示例,你会明白ret不应该是未定义的,而是在函数运行后的一个jqXHR对象——不管是否成功触发。你确定吗?是的。正如我在另一条评论中所写,我又添加了一行,firebug显示了返回值。我的问题是,警报从未触发,因此我永远不会进入带有“数据”的函数…也许您遇到了错误???如果您想让我们找到问题,您应该向我们显示错误消息。当我用Jason Goemaat发布的代码替换我的代码时,我得到了“成功”。但这个功能可能在做其他事情。我不太擅长这种语法,所以我真的不知道如何获得打印错误消息。我会看看我能做些什么。我可以打印这个。error(function(){alert(“error”);});但是我不知道使用哪个参数来打印错误消息。。。
response.setContentType("application/json");
getJSON: function( url, data, callback ) {
    return jQuery.get( url, data, callback, "json" );
}
function checkUni() {
    var URL = "http://localhost:8080/GradSchoolApp/test.jsp";
    var ret = $.getJSON(URL,"",function(data){
        alert("success");
    });
}