我正在尝试向我的spring后端发送一个AJAX请求。我正在击中控制器,并成功响应。我是javascript和AJAX的新手,所以我达到了一个我无法通过的上限。我试图在成功的回调上调用“完成”,并且得到一个非描述性的错误。按下“按钮”后,这是我的控制台
clicked testAjax. js:3
Uncaught SyntaxError: Unexpected token : product:1
我还没有创建产品文件,但是当我进入它时,我得到了我想要在第1行(唯一的一行)发回的对象:
{"name":"Matthew","id":0}
我的AJAX通话如下。如何让返回对象进入我的“完成”功能?
另外,我还有什么其他的错误?
$("button").click(function(){
console.log("clicked");
var request = $.ajax({
type : "GET",
url : ***The problem is not here, I am hitting the controller***
dataType: "jsonp",
crossDomain: true,
success: done,
});
function done(obj, status, jqXHR){
alert("in success function");
console.log(obj);
$("li#pName").append("matthew");
};
});
答案 0 :(得分:2)
你的代码有点狡猾。确保你也正确地关闭括号 - 我认为这就是让你陷入困境的原因。
以下是在AJAX请求中使用匿名函数的解决方案:
$("button").click(function(){
console.log("clicked");
var request = $.ajax({
type : "GET",
url : ***The problem is not here, I am hitting the controller***
dataType: "jsonp",
crossDomain: true,
success: function (obj, status, jqXHR) {
alert("in success function");
console.log(obj);
$("li#pName").append("matthew");
}
});
});
以下是您想要使用单独功能的解决方案。
function done(obj, status, jqXHR) {
alert("in success function");
console.log(obj);
$("li#pName").append("matthew");
}
$("button").click(function(){
console.log("clicked");
var request = $.ajax({
type : "GET",
url : ***The problem is not here, I am hitting the controller***
dataType: "jsonp",
crossDomain: true,
success: done
});
});
答案 1 :(得分:2)
你正在设置dataType
到jsonp
,但是你要发出直接的json文本,jsonp期望提供一个函数,即someFn({"name":"Matthew","id":0})
由于jquery会自动为回调函数名称附加一个随机名称(如果你没有提供),你需要捕获callback
GET变量并回显由名称命名的函数调用所包装的json文本。 callback
变量。
不熟悉spring但是使用php会看起来像
$fnName = $_GET["callback"];
echo $fnName."(".json_encode($someDataObj).")";
更改后端以执行类似操作或将dataType
更改为json
,以便它将直接解析json文本。