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"
}]}
Спасибо заранее.
Ответы
Ответ 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.