Подтвердить что ты не робот

AJAX вызов и очистка JSON, но Синтаксис Ошибка: отсутствует; перед выражением

Я делаю вызов JSONP с перекрестным доменом, используя этот код:

jQuery.ajax({
        async: true,
        url: 'http://mnews.hostoi.com/test.json',
        dataType: 'jsonp',
        method: "GET",
        error: function (jqXHR, textStatus, errorThrown) {
            console.log(textStatus + ': ' + errorThrown);
        },
        success: function (data, textStatus, jqXHR) {
            if (data.Error || data.Response) {
                exists = 0;
            }
        }
    });

При отладке в Firebug я получаю следующую ошибку:

enter image description here

SyntaxError: missing ; before statement

Однако, когда я передаю свой json-объект (доступный по ссылке в коде JQ) с помощью инструмента jsonlint.com, он говорит, что он действителен JSON. И я тоже не вижу никаких аномалий. Как он может возвращать синтаксическую ошибку? Это какая-то деталь JSONP, которую я не получаю или что?

Пример JSON

{"news":[ {
  "sentences": [
    "Neuroscientists have discovered abnormal neural activity...", 
    "The researchers found that these mice showed many symptoms...", 
    "\"Therefore,\" the study authors say, \"our findings provide a novel.."
  ], 
  "summaryId": "ZJEmY5", 
  "title": "Abnormal neural activity linked to schizophrenia"
}]}

Спасибо заранее.

4b9b3361

Ответ 1

JSONP не JSON. Ответ JSONP будет состоять из JavaScript script, содержащего только вызов функции (для предопределенной функции) с одним аргументом (который является литералом объекта JavaScript, соответствующим синтаксису JSON).

Ответ, который вы получаете, - это JSON, а не JSONP, поэтому ваши попытки справиться с этим как JSONP терпят неудачу.

Измените dataType: 'jsonp' на dataType: 'json' (или полностью удалите строку, сервер выдает правильный тип содержимого, поэтому вам не нужно переопределять его).

Так как ваш script работает в другом месте с JSON, вам также необходимо предпринять шаги (большинство, но не все, из которых требуют, чтобы вы управляете хостом, обслуживающим JSON) для работы с той же политикой происхождения.

Ответ 2

Ошибка заключается в том, что она возвращает JSON, а не JSONP.

JSONP должен выглядеть как

someCallBackString({ The Object });

Ответ 3

Вот рабочий пример

$.ajax({
 type: 'GET',
 url: 'http://xxx.amazonaws.com/file.json',
 dataType: 'jsonp',
 jsonpCallback: 'callback',
 success: function(json){
   console.log(json);
 }
});

И вы должны положить callback в начало вашего file.json, например:

callback({"item":{".......

Ответ 4

Как указано в epascarello , ответ JSONP должен быть отправлен, например:

callBackFunction({ JSON Object })

Затем функцию звонящего можно настроить следующим образом:

var url =  "http://someremoteurl.com/json";
    $.getJSON(url + "?callback=?", null, function(data) {
    callBackFunction(data);
});

Затем вы можете запрограммировать данные ответа как:

function callBackFunction(data)
{
   console.log(data);
}

Ответ 5

Если вы используете параметр callback =?, ответ на стороне сервера должен выглядеть следующим образом:

$_callback = $_GET['callback'];    
echo $_callback . '(' . json_encode(YOUR_VARIABLE) . ');';

Если параметр < callback =? "не определен, ваш ответ должен выглядеть следующим образом:

echo '[' . json_encode($_return_array) . ']';

Ответ 6

Если вопрос связан с Ruby, то в вашем контроллере убедитесь, что вы правильно отформатировали формат. Пример:

def view_product
   data = Product.find params[:id]
   render :json =>  data, :callback => params[:callback]
end

В вашем методе рендеринга вы должны иметь параметр : callback, иначе он будет отображаться в json вместо jsonp.