2010-09-10 88 views
1

嗨我有一個大問題。我必須得到一些JSON表格localhost:8080jQuery.ajax響應爲空或未定義

服務器端是基於restful的jax-rs服務器。

@Path("/m") 
public class M { 
    @GET 
    @Path("{id: [a-z]{1,4}-\\d{1,4}}") 
    @Produces("application/json") 
    public Response getCar (@PathParam("id") final String id) { 
    final ResponseBuilder builder; 
    builder = Response.ok("{\"one\":\"bla\"}"); 
    return builder.build(); 
    } 
} 

對於同源策略,我有以下腳本上本地主機: '?回調=' 8080/JS /的script.js

function test (file) { 
    $.ajax({ 
     type: 'GET', 
     url: file + '?callback=?', 
     dataType: 'json', 
     success: function (data) { 
      alert('works'); 
     } 
    }); 
} 

我不喜歡部分,但沒有這個響應是空的(HTTP-Body)。

現在的問題是,成功的方法永遠不會執行。當我將dataType更改爲「腳本」時,該方法將被調用,但傳遞的參數(數據)未定義。那麼我做錯了什麼?

+0

發佈你的服務器端代碼+通過兩個「?」是個不錯的主意。在參數 – Bob 2010-09-10 14:48:13

+0

如果您使用JSONP,'?callback =?'是正確的。 – 2010-09-10 14:49:59

+0

@Byron Cobb,這是正確的,但不是在這種情況下。第二個'?'被jQuery用來提供一個動態的回調函數。在向服務器發出請求之前,它將替換爲該函數的名稱。 – 2010-09-10 14:51:10

回答

0

試試這個:

function test (file) { 
    $.getJSON(file + '?callback=?', function(data){ 
     alert("works"); 
    }); 
} 
+0

好的警報對話框出現,但數據爲空(空的HTTP身體)。 使用「?callback =?」我有一個內容,但方法不會被調用。 – 2010-09-10 14:56:15

0

如果你的主站點是localhost:80localhost,即使你調用腳本是在:8080將無法​​正常工作。它使用HTML的域/端口而不是外部JS文件。 callback=?可能工作的原因是因爲它向腳本元素添加了一個腳本元素。重要的是服務器上的JSON支持回調。

舉例來說,如果它是一個PHP腳本,那就需要做這樣的事情:

<?php 
    $json = json_encode(array('key' => "value")); 
    echo isset($_GET['callback']) ? $_GET['callback'] . "($json);" : $json; 

所以輸出結果是這樣的:

callback_function({"key" => "value"}); 

最後,因爲你是利用JSONP(JSON有回調),只需使用$.getJSON

$.getJSON(file + '?callback=?', function (data) { 
    alert('It Works'); 
}); 
+0

主要網站是本地和JSON的東西來自本地主機:8080 – 2010-09-10 15:07:14

0

爲什麼不發暗示這一點,並使用getJSON方法:

function test (file,id) { 
$.getJSON(file, {id:id}, function(data){ 
// do whatever with the returned data array, the id value can be left off if you do not need to reference a particular record. 
alert('works'); 
}); 
} 

我認爲這會讓你得到你想要做的。

+0

從他的症狀來看,它似乎是它的跨域起源政策問題,這就是爲什麼JSONP有點奏效,但我打賭服務器不支持回電話。 – 2010-09-10 14:54:44

+0

後端是一個jax-rs服務器,所以可能沒有回調支持。 @Path( 「/ M」) 公共M級{ \t @GET \t @Path( 「{ID:[AZ] {1,4} - \\ d {1,4}}」) \t公共響應getCar(@PathParam(「id」)final字符串id){ \t \t最終的ResponseBuilder構建器; \t \t builder = Response.ok(「{\」one \「:\」bla \「}」); \t \t return builder.build(); \t} } 是的,我知道getJSON。但最後知道這只是一個測試。 – 2010-09-10 15:06:01

0

我在localhost:8080上創建了一個簡單的測試頁面,它工作正常。

似乎是這樣,我誤解了同樣的原產地政策問題。