2015-01-13 5 views
4

Я пытаюсь создать запрос ajax, который в конечном итоге позволит пользователям сортировать список, нажимая кнопки рядом с каждым элементом. Вот то, что я до сих пор:Использование ajax с jQuery - url не принимается

upLinks.on('click', function(e) { 
    var link; 
    e.preventDefault(); 
    link = $(this)[0]; 
    console.log(link.pathname); 
    $.ajax({ 
    type: 'PUT', 
    url: link.pathname 
    }); 
    return false; 
}); 

console.log(link.pathname) выходит из /projects/11/project_items/104/sort на консоль, как и ожидалось. Однако, Ajax запрос возвращает ошибку:

PUT http://localhost:3000/projects/11 400 (Bad Request) 

Глядя на логи сервера, это на самом деле собирается /projects/11, не /projects/11/project_items/104/sort по какой-то причине. Согласно документам jQuery, /projects/11 был бы параметром по умолчанию для ajax в этом случае, потому что это маршрут текущей страницы. Это заставляет меня поверить, что он вообще игнорирует параметр url.

Если я изменяю тип метода HTTP на GET, ajax работает как ожидалось. Есть ли причина, по которой /projects/11/project_items/104/sort не является приемлемым адресом для запроса PUT? Я думал, что, поскольку я обновляю данные (с новой позицией), самым логичным вариантом будет запрос PUT.

+1

Попробуйте сделать трассировку сети (нажмите F12 в Chrome | Firefox и перейти к сети), чтобы увидеть, что на самом деле отправляется. – amphetamachine

+2

Зависит, если сервер может принимать запросы PUT – pee2pee

+0

@amphetamachine Спасибо за отзыв. Через вкладку сети я смог убедиться, что запрос PUT действительно отправляется успешно, но затем сервер пытался перенаправить, что вызвало ошибку. Таким образом, это была проблема на стороне сервера. – Shaun

ответ

3

Просто обратите внимание, что если вы используете веб-сервер IIS, а запросы jquery PUT или DELETE возвращают 404 ошибки, вам необходимо включить эти глаголы в IIS. Я нашел, что это хороший ресурс: http://geekswithblogs.net/michelotti/archive/2011/05/28/resolve-404-in-iis-express-for-put-and-delete-verbs.aspx

«Тип запроса (« POST »или« GET »), по умолчанию« GET ». Примечание. Другие методы HTTP-запроса, такие как PUT и DELETE, также можно использовать здесь, но они не поддерживаются всеми браузерами ». от: http://api.jquery.com/jQuery.ajax/#options

справочном вопрос стека: How to send a PUT/DELETE request in jQuery?

+1

Вопрос показывает, что URL-адреса идут не туда, но – Quentin

+0

@Quentin, но OP сказал, что когда запрос изменен на «GET», он работает так, как ожидалось, поэтому его не URL-адрес, а запрос «PUT», который отвечает на этот вопрос – indubitablee

+1

@indubitablee Предполагая, что это проблема на сервере, а не на клиенте. Если клиент обращается к URL-адресу в запросе PUT, изменение содержимого на сервере не поможет. –

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