У меня есть простой 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=jQueryxxxxxxx
), и функция success никогда не вызывается, потому что jquery упаковывает ее в анонимную функцию, имя которой передается в аргументе callback, а сервер возвращает стандартный json (я не хочу использовать jsonp, так как это POST запрос и НЕ междоменный запрос). Я проверил, и текущий view url и этот u
для ajax url аргумента находятся на http://localhost:8080/myapp/areax/...
, так что я не понимаю, почему jQuery делает JSONP запрос здесь.
EDIT:
Вид, на котором это не работает, запрос 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, так и должно быть
Но я хочу сделать нормальный json запрос, а не jsonp.
UPDATE
Самое странное (я начинаю думать, что это ошибка в jQUery v1.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} })); }
});