2010-09-10 49 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上创建了一个简单的测试页面,它工作正常。

似乎是这样,我误解了同样的原产地政策问题。