Как можно аккуратно изменить неподдерживаемый метод XMLHttpRequest до поддерживаемого (например, POST)?

Согласно документации jQuery, $.ajax() поддерживает «другие методы HTTP-запроса, такие как PUT и DELETE, но они [не обязательно] поддерживаются всеми браузерами." [1]

Мне интересно, есть ли способ проверить, поддерживает ли браузер данный метод, например PATCH, PUT, DELETE и т. Д. И аккуратно перейти на метод POST с использованием $.ajaxPrefilter(), если он не поддерживается? Или лучше просто всегда POST из формы или вызова AJAX и использовать какой-либо другой контекст (например, _method или X-заголовок, поддерживаемый сервером), чтобы указать предполагаемый метод, а не то, что фактически использовалось?

ОБНОВЛЕНИЕ. Похоже, что один из способов проверить, поддерживается ли конкретный тип запроса, - это сделать запрос, например

var x=new XMLHttpRequest();
x.open("patch", "/");
x.send(null);

Однако я бы хотел по возможности избегать запросов при определении поддержки конкретных типов запросов.


person Sean Quinn    schedule 08.11.2013    source источник
comment
stackoverflow.com/questions/1757187/   -  person dandavis    schedule 09.11.2013
comment
Спасибо, я уже прочитал этот вопрос (и связанный с ним вопрос был помечен как дубликат), но ни один из них не отвечает на вопрос о том, как проверить поддержку конкретного браузера в JavaScript для произвольного метода запроса. Например, все новые браузеры должны принимать PATCH, а старые - нет. Для таких браузеров было бы важно знать это и выполнять соответствующие действия. Отсюда вопрос: как можно обнаружить поддержку того или иного метода запроса?   -  person Sean Quinn    schedule 09.11.2013
comment
вы можете использовать команду try / catch для деградации практически в любой ситуации с неизвестными элементами управления хостом. Я использовал PROPGET в IE7, если это поможет, я сомневаюсь, что вам стоит вернуться еще дальше во времени, чем это ...   -  person dandavis    schedule 09.11.2013
comment
@dandav достаточно честно, помимо попытки открыть запрос XHR с использованием определенного метода (например, PATCH), как упоминалось выше в моем редактировании, и выпадения нескольких try/catch операторов, что я не очень-то хотел делать, я надеялся, что может быть способ определения возможностей - что-то вроде: XMLHttpRequest.isMethodSupport('PATCH') (Видел вашу правку, я тоже посмотрю на PROPGET, спасибо!)   -  person Sean Quinn    schedule 09.11.2013
comment
что-то недостаточно современное, чтобы использовать указанные методы, вряд ли реализует проприетарный API преобразования возможностей. Я не хочу отклонять этот вопрос, это хороший вопрос, но если бы был простой ответ, вы бы его уже нашли ... Я думаю, что МЕТОД в верхнем регистре все работает в IE7, и никто особо не использует старые второстепенные браузеры ...   -  person dandavis    schedule 09.11.2013
comment
@dandav это правда. В любом случае, похоже, у меня есть кое-что еще, прямо сейчас я склоняюсь к тому, чтобы просто использовать _method или поддерживаемый подход X-заголовка и преобразовывать что-нибудь нестандартное. По крайней мере, это придаст целостность коду. Спасибо! :)   -  person Sean Quinn    schedule 09.11.2013