我做了一个Rest Web服务:
package org.jboss.samples.rs.webservices;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
@Path("/MyRESTApplication")
public class HelloWorldResource {
@GET()
@Produces("application/json")
@Path("/dealInfo/{dealId}")
public String sayHello(@PathParam("dealId") int dealId) {
System.out.println("dealid......"+dealId);
switch(dealId) {
case 1 :System.out.println("employee id.....");
return "{'name':'George Koch', 'age':58}";
case 2:
return "{'name':'Peter Norton', 'age':50}";
default:
return "{'name':'unknown', 'age':-1}";
} // end of switch
}
}
当我去网络浏览器&在地址栏中输入:
http://localhost:8080/nagarro-0.0.1-SNAPSHOT/MyRESTApplication/dealInfo/2
它给了我:
{'name':'Peter Norton', 'age':50}
但是当我在JQuery方法中使用ajax调用来调用它时。 e.g。
$.ajax({
type: "GET",
url: "http://localhost:8080/nagarro-0.0.1-SNAPSHOT/MyRESTApplication/dealInfo/2",
data: "",
success: function(resp){
// we have the response
alert("Server said123:\n '" + resp + "'");
},
error: function(e){
alert('Error121212: ' + e);
}
});
我在这次通话中遇到错误。
当我在IE中使用F12进行调试时,我也会关注
"Invalid JSON: {\'name\':\'Peter Norton\', \'age\':50}"
有人会告诉我通话中可能出现的问题。
答案 0 :(得分:4)
您的服务和输出是正确的。
问题是同一个orgin政策http://en.wikipedia.org/wiki/Same_origin_policy
Ajax不允许访问内部级别的服务。 例如,在www.example.com/index.html中,您无法访问 www.example.com/service/book?id=1。 因为您已将上下文路径从www.example.com更改为www.example.com/service/book。 这不是安全性,但我们有一个解决方案
以前,我有同样的问题,我用下面的代码解决了它。
我认为它可以帮到你。
关键点是dataType: 'json'
function testService() { $.ajax( { dataType: 'json', headers: { Accept:"application/json", "Access-Control-Allow-Origin": "*" }, type:'GET', url:'http://localhost:8080/service/book/search/1', success: function(data) { document.writeln("Book id : " + data.id); document.writeln("Book title : " + data.name); document.writeln("Description : " + data.description); }, error: function(data) { alert("error"); } }); }
答案 1 :(得分:3)
我认为你没有返回有效的json:尝试类似:
return "{\"name\":\"unknown\", \"age\":-1}"
因为这个
{
"name": "unknown",
"age": -1
}
是有效的JSON(您必须使用"
,而不是'
),而这不是
{
'name': 'unknown',
'age': -1
}
您还应指定数据类型
$.ajax({
type: "GET",
url: "http://localhost:8080/nagarro-0.0.1-SNAPSHOT/MyRESTApplication/dealInfo/2",
dataType: "json",
success: function(resp){
// we have the response
alert("Server said123:\n '" + resp.name + "'");
},
error: function(e){
alert('Error121212: ' + e);
}
});
答案 2 :(得分:2)
使用http://jsonlint.com/验证您的输出。 你的报价无效。
{"name":"toto"} is ok
{'name':'toto'} is not