在AJAX CORS请求中访问响应

时间:2014-03-03 18:14:07

标签: javascript jquery ajax cors

我正在尝试向我的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");
    };
});

2 个答案:

答案 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)

你正在设置dataTypejsonp,但是你要发出直接的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文本。