jQuery.ajax возвращает jsonp вместо json - PullRequest
6 голосов
/ 20 января 2012

У меня есть простой вызов ajax, подобный этому:

$.ajax({
       url: u, type: "POST", dataType: "json",
       data: data,
       success: function (d) { response($.map(d, function (o) { return { label: o.Text, value: o.Text, id: o.Id} })); }
});

Это часть автозаполнения tb, которая не работает только в одном представлении.Причина, по которой он не работает, состоит в том, что вместо json он делает запрос jsonp (понюхав, я увидел, что он вызывает переданный URL с ?callback=jQueryxxxxxxxxx), и функция успеха никогда не вызывается, потому что jquery упаковывает его в анонимную функцию, имя которой передается вАргумент обратного вызова, и сервер возвращает стандартный json (я не хочу использовать jsonp, поскольку это POST-запрос, а НЕ междоменный запрос).Я проверил, что и текущий URL-адрес представления, и этот u для аргумента URL-адреса ajax находятся на http://localhost:8080/myapp/areax/..., поэтому я не понимаю, почему jQuery делает запрос JSONP здесь.

РЕДАКТИРОВАТЬ:

Вид, на котором это не работает, с выполнением URL-запроса выглядит следующим образом: http://hostname:8080/AreaName/Report/ViewReport и параметр u в ajax имеет вид / AreaName / MyAutoComplete / Search , поэтому полный URL-адресдля которого выполняется автозаполнение, как http://hostname:8080/AreaName/MyAutoComplete/Search?callback=jQuery151013129048690121925_1327065146844

Ответ сервера выглядит следующим образом:

[{"Id":2,"Text":"001"},{"Id":7,"Text":"002"}]

Я знаю, что это не jsonp, для этого оно должно быть

<script>
 jQuery151013129048690121925_1327065146844([{"Id":2,"Text":"001"},{"Id":7,"Text":"002"}]);
</script>

Но я хочу сделать обычный запрос json, а не jsonp.

ОБНОВЛЕНИЕ

Самое странное (я начинаю думать, что это ошибка в jQUeryv1.5.1, который используется в проекте), это то, что когда я удаляю dataType: "json", он делает обычный запрос json:)

Итак, вместо того, чтобы сделать запрос json, теперь я приму объяснение, почемуэто работает, как и ожидалось (а с dataType: "json" нет):

$.ajax({
       url: u, type: "POST",
       data: data,
       success: function (d) { response($.map(d, function (o) { return { label: o.Text, value: o.Text, id: o.Id} })); }
});

1 Ответ

2 голосов
/ 24 января 2012

Из ошибки здесь: http://bugs.jquery.com/ticket/8118

Вы, вероятно, используете плагин jquery-validation. Плагин Jquery-проверки не совместим с JQuery 1.5, и конфликт вызывает проблемы, с которыми вы здесь сталкиваетесь.

Если проблема не связана именно с плагином jquery-validation, проверьте, есть ли у вас какой-либо другой плагин jquery, который может быть несовместим с jQuery 1.5

...