Что может быть причиной 406 при идентичном.json почтовом звонке?
Я использую тяжелое приложение на основе JavaScript, которое использует функцию перетаскивания.
Это работает хорошо. Но если я добавляю на страницу динамический объект (который имеет те же атрибуты и переменные, что и другие объекты), он перетаскивается, но при отбрасывании POST возвращает 406.
Я совершенно не уверен в том, что может происходить здесь, так как я переустанавливаю любые слушатели среды, которые могут понадобиться до того, как будет сделан этот вызов. Я сломал призыв к этому:
куда .cranbar
это рабочий предварительно существующий объект. Я переключаю это с идентичным .foobar
который динамически добавляется, и он возвращает 406.
attrs = { _method:"put"};
box = $(".cranbar");
$.post(box.attr('data-update_path'), attrs, function(data) {
});
Этот фрагмент взят из make_droppable
метод, который загружается после создания объекта и до того, как я попытаюсь перетащить его.
make_droppable: function(){
$('table#week .day').droppable({
accept: '.job, .task',
hoverClass: 'droppable-hover',
drop: function(e, ui) {
if (confirmOnDrop){
if (!confirm('Are you sure?')) {
if ($('table#week').length > 0) {
draw_weekly_calendar();
}
return false;
}
}
var box = $(ui.draggable);
// var old_container = box.parents('td:first');
var new_cell = $(this);
var new_container = $(this).find('.rel_box');
// add indicator
box.addClass('indicator');
// add box to new container
box.attr('style', 'position: absolute;').appendTo(new_container);
var attrs = null;
if (box.attr('data-object-type') == 'job') {
// update job already on screen
attrs = {
'job[scheduled_on]': new_cell.attr('data-scheduled_on'),
'_method': 'put'
}
}
else if (box.attr('data-object-type') == 'task') {
attrs = {
'task[scheduled_at]': new_cell.attr('data-scheduled_on'),
'_method': 'put'
}
}
if (attrs) {
$.v = attrs;
$.post(box.attr('data-update_path'), attrs, function(data) {
box.removeClass('indicator');
box.attr('data-scheduled_at', new_cell.attr('data-scheduled_on'));
draw_weekly_calendar();
});
}
// nice effect
box.effect('shake', { times: 1, distance: 2 }, 50);
}
});
},
Кто-нибудь знает, что я могу сделать, чтобы найти источник этого 406?
Обновить
Это, вероятно, имеет много общего с этим. Но я сравниваю заголовки сейчас.
Неудачный пост:
Response Headers
Cache-Control no-cache
Connection Keep-Alive
Content-Length 1
Content-Type text/html; charset=utf-8
Date Mon, 09 Jul 2012 16:11:27 GMT
Server WEBrick/1.3.1 (Ruby/1.9.2/2011-02-18)
Request Headers
Accept text/javascript
Accept-Encoding gzip, deflate
Accept-Language en-us,en;q=0.8,es-es;q=0.5,es;q=0.3
Connection keep-alive
Content-Length 57
Content-Type application/x-www-form-urlencoded; charset=UTF-8
Успешное сообщение:
Response Headers
Cache-Control max-age=0, private, must-revalidate
Connection Keep-Alive
Content-Length 2024
Content-Type application/json; charset=utf-8
Date Mon, 09 Jul 2012 16:11:35 GMT
Etag "93432c11e3cc55dfec8e0aee7c08bcc1"
Server WEBrick/1.3.1 (Ruby/1.9.2/2011-02-18)
Request Headers
Accept text/javascript
Accept-Encoding gzip, deflate
Accept-Language en-us,en;q=0.8,es-es;q=0.5,es;q=0.3
Connection keep-alive
Content-Length 57
Content-Type application/x-www-form-urlencoded; charset=UTF-8
1 ответ
Мне кажется, что проблема заключается в Content-Type
Resposne заголовка. Он использует text/html
, но ожидает application/json
, Это приводит к ошибке 406, потому что, хотя данные были успешно запрошены, это не правильный ответ -> 406. Я, честно говоря, не знаю, можете ли вы изменить contentType
с параметрами $.post, но вы можете сделать это с .ajax()
,
$.ajax({
type: 'POST',
url: box.attr('data-update_path'),
contentType: 'application/json; charset=utf-8',
data: attrs,
success: function(data){
box.removeClass('indicator');
box.attr('data-scheduled_at', new_cell.attr('data-scheduled_on'));
draw_weekly_calendar();
}
});
Надеюсь, это решит вашу проблему.