2012-02-28 59 views
1

我已經做了REST Web服務:調用使用JQuery Ajax調用休息Web服務,Web服務返回JSON字符串

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 

    } 
} 

當我去到Internet Explorer的地址欄中&類型的:

http://localhost:8080/nagarro-0.0.1-SNAPSHOT/MyRESTApplication/dealInfo/2 

它給我:

{'name':'Peter Norton', 'age':50} 

但是,當我把它用Ajax調用我一個JQuery方法。例如

$.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}" 

會有人告訴我,可能是我的電話的問題。

+0

如何調用此Web服務? – eureka19 2016-10-06 09:01:38

回答

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); 
     } 
    }); 
+1

它工作正常,但我只想知道,無論何時我們指定@Produces(application/json),那麼爲什麼需要在客戶端將數據類型設置爲JSON。 – 2012-02-28 17:41:02

+0

@SAM沒有必要,jQuery會猜對了,我想(我不是java專家) – 2012-02-28 20:54:44

4

您的服務和輸出是正確的。

問題是相同的淵源考政策http://en.wikipedia.org/wiki/Same_origin_policy

阿賈克斯不允許訪問內部級的服務。 例如,在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"); 
         } 
        }); 
       }