2012-01-20 4 views
6

У меня есть простой Ajax вызов, как это:jQuery.ajax возвращает JSONP вместо JSON

$.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} })); } 
}); 

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

EDIT:

Посмотреть на которой это не работает уже URL запроса производится как это: http://hostname:8080/AreaName/Report/ViewReport параметр и у Аякса, как /AreaName/MyAutoComplete/Поиск, поэтому полный 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.

UPDATE

Weirdest вещь все (я начинаю думать, что это ошибка в 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} })); } 
}); 
+0

Можете ли вы показать полный URL, включая любые параметры? – nnnnnn

+0

Можете ли вы попробовать, когда «u» относится к вашему текущему домену. Например:/myapp/areax/... – RvdK

+0

- это запрос на перекрестный домен? может быть один и тот же хост, но другой порт? Это странный чувак ... –

ответ

2

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

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

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

+0

Да, это точная проблема, с которой я столкнулся. Как я подозревал, это была ошибка в jQuery :) Спасибо! –

Смежные вопросы