У меня есть простой вызов 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} })); }
});