2010-03-08 2 views

ответ

2

Не изначально, боюсь. В prototypable реализациях вы можете написать свой собственный прототип:

XMLHttpRequest.prototype.__oldOpen = XMLHttpRequest.prototype.open; 
XMLHttpRequest.prototype.verb = ""; 
XMLHttpRequest.prototype.url = ""; 
XMLHttpRequest.prototype.open = function (verb, url, async) 
{ 
    this.verb = verb; 
    this.url = url; 
    this.__oldOpen.call(this, verb, url, async); 
} 

Не стоит ожидать, что работать в IE7 и старше, хотя.


Я полагаю, вы могли бы сделать это полностью воссоздать XMLHttpRequest объект, но это заняло бы много работы, чтобы получить это право:

var oldXHR = XMLHttpRequest; 
function XMLHttpRequest() 
{ 
    var realXHR = new oldXHR(); 
    this.onreadystatechange = function() {} 
    this.open = function (verb, url, async) 
    { 
     this.verb = verb; 
     this.url = url; 
     realXHR.open(verb, url, async); 
    { 
    this.send = function() { realXHR.send(); } 

    // all other properties and methods... 
} 

Конечно, вы должны пойти к усилию правильно связывание onreadystatechange и установив status и т.д.

+0

Приятное обходное решение (+1), мне нужно, чтобы это было crossbrowser, хотя ... –

+0

@Pablo: Возможно, вы могли бы воссоздать весь объект XMLHttpRequest, чтобы вместо этого заменить его. См. Мое обновление. –

1
Currently, нет стандартного способа получить HTTP глагол или URL из объекта XHR. Но W3C рассматривает getRequestHeader для будущих соображений.
+0

@nvl: Будет ли такая функция возвращать глагол или URL? Я знаю, что 'host' является заголовком запроса, но глагол и путь идут по строке перед всеми именованными заголовками (от Fiddler:' GET /fiddler2/updatecheck.asp?isBeta=False HTTP/1.1'). –

+0

@ Энди: обратитесь к URL-адресу ('в настоящее время'). Это будет рассмотрено в будущих пересмотрах. Таким образом, спецификация еще не определена. Вероятно, он будет содержать всю информацию, которая находится в заголовке запроса. –

+0

действительно, но я предполагал (скорее, безопасно, я думаю), функция с меткой 'getRequestHeader()' взяла бы один параметр для имени заголовка (как 'getResponseHeader()'). –

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