【发布时间】:2015-01-29 11:56:18
【问题描述】:
我用 Java 构建了一个 REST Web 服务,它以“application/json”格式发送数据。它在不同域的单独 Linux 机器上运行,我正在尝试使用 jQuery $.ajax 从我的 Windows 机器访问 REST 数据。
当我在浏览器中输入 URL 时,它会按预期提示我输入用户名密码。在提供正确的 est 值时,我可以看到 JSON 输出。
但是当我尝试通过 jQuery Ajax 函数这样做时,我不断收到以下错误:
Uncaught SyntaxError: Unexpected token :
我的服务器 URL 如下所示:
http://my.server.com:port/application/rest/1.0/Books
如果我在浏览器中输入,我会在白色背景中得到以下文本输出:
{
items: [{
BookId : 134675,
LastReadDate: "2014-11-25 00:00:00.0",
Source: null
},{
BookId : 134676,
.
.
.
]}
它有更多数据,但这与手头的问题无关。请放心,contentType 是application/json,这是我正在编写的 AJAX 函数:
$(document).ready(function() {
$.ajax({
url: "http://my.server.com:port/application/rest/1.0/Books",
type: "Get",
crossDomain: true,
success : function(data) {
console.log(data);
},
error: function(jqXHR, textStatus, errorThrown){
alert(textStatus + " " + errorThrown);
},
dataType: "jsonp",
contentType: "application/json",
jsonp: false,
jsonpCallback: "myMethod",
username: "user1",
password: "1234"
});
});
在jQuery AJAX之外,myMethod被定义为:
window.myMethod = function(data) {
return data;
}
jQuery AJAX 中的错误方法告诉我 jsonpCallback 没有被调用。
我在 stackoverflow 上发现了类似的错误,但没有任何建议让它消失。
我使用 Chrome Inspector 工具 - 在那里,请求正在按预期加载 JSON 数据,但在第一行,items 数组开始的地方,冒号可能不被接受。正如我从这里的其他线程中了解到的那样,它期待回调的开始。但无论我做什么,我都无法收到callback({JSON}) 格式。
请帮忙。是的,我可以访问服务器,并在 Chrome 和 Mozilla 中使用 REST 客户端扩展测试了其余数据。正在返回正确的 JSON 对象数组。
【问题讨论】:
-
尝试使用它来确保您拥有正确的 JSON:jsonformatter.curiousconcept.com
-
@rodrigogq,我通过从服务器复制粘贴 JSON 对象来检查。它说有效。
-
Jsonp 不是 json,你要求的是 jsonp 但返回的是普通的 json
-
您是否尝试过将
window.myMethod = function(data) {}更改为显式声明function myMethod(data) { }? -
是的,但无济于事。
标签: jquery ajax json rest jsonp