jQuery.ajax响应为空或未定义

时间:2010-09-10 14:43:03

标签: ajax json jquery

嗨,我有一个大问题。我必须得到一些JSON表单 localhost:8080

服务器端是一个基于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();
  }
}

对于相同的原始政策,我在 localhost:8080 / js / script.js

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

我不喜欢'?callback =?'部分,但没有这个,响应是空的(HTTP-Body)。

现在的问题是,成功方法永远不会执行。当我将dataType更改为“script”时,将调用该方法,但未定义传递的参数(数据)。那么我做错了什么?

4 个答案:

答案 0 :(得分:0)

试试这个:

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

答案 1 :(得分:0)

如果您的主网站是localhost:80,即localhost,即使您的调用脚本位于: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');
});

答案 2 :(得分: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' );   
});
}

我认为这会让你得到你想做的事。

答案 3 :(得分:0)

我在localhost:8080上创建一个简单的测试页面,它可以工作。

似乎是这样,我想知道同样的原产地政策问题。