使用JQuery Ajax调用调用Rest Webservice,Web服务返回JSON字符串

时间:2012-02-28 11:29:56

标签: jquery json web-services

我做了一个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);  
           }  
         });

我在这次通话中遇到错误。

enter image description here

当我在IE中使用F12进行调试时,我也会关注

"Invalid JSON: {\'name\':\'Peter Norton\', \'age\':50}"

有人会告诉我通话中可能出现的问题。

3 个答案:

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