jQuery.ajax Ответ пуст или не определен - PullRequest
1 голос
/ 10 сентября 2010

Привет, у меня есть большая проблема. Мне нужно получить JSON-форму localhost: 8080 .

На стороне сервера находится сервер 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-тело).

Проблема в том, что метод успеха никогда не будет выполнен. Когда я меняю dataType на «script», метод вызывается, но переданный аргумент (data) не определен. Так что я делаю не так?

Ответы [ 4 ]

0 голосов
/ 10 сентября 2010

Я создаю простую тестовую страницу на localhost: 8080, и она работает.

Кажется, я неправильно понимаю ту же проблему политики происхождения.

0 голосов
/ 10 сентября 2010

Если ваш основной сайт - localhost:80, то есть localhost, даже если ваш скрипт вызова имеет значение :8080, он не будет работать.Он использует домен / порт HTML, а не внешние файлы JS.Причина, по которой callback=? может работать, заключается в том, что он добавляет элемент script на страницу.Важно то, что 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 голосов
/ 10 сентября 2010

Почему бы не упростить это и использовать метод 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 голосов
/ 10 сентября 2010

Попробуйте это:

function test (file) {
    $.getJSON(file + '?callback=?', function(data){
        alert("works");
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...