2009-05-28 15 views
27

xhr nesnesinden istek URL'sini ayıklamanın bir yolu var mı? Kanal özelliğini kullanarak firebug'de URL'yi görebiliyorum ancak javascript kullanarak bunu sorgulayamıyorsunuz.Xhr nesnesinden istek URL'sini al

+0

bu firefox uzantısı için veya bir sayfada bir komut dosyası için mi? Eğer sayfada ise, neden bu bilgiye sahip değildiniz? –

+0

Çeşitli veri talebinde birden aralıkları, ben genel olaylar (göstermek/gizlemek ilerleme göstergelerini) işlemek ajaxComplete olay içinde bir kenar durum için url Sadece gerekli erişim için bazı ortak ajaxStart & ajaxComplete etkinlik var. – redsquare

cevap

6

Umarım probleminizi doğru anlıyorum.

Bu tür bir işlevsellik sağlamak için XHR nesnelerini kendi nesnenizle sarmanız oldukça basit olmalıdır. Aşağıda

aşırı basitleştirilmiş bir örnektir:

// Assumption: GetXHR() returns a new XHR object, cross browser. 

function HTTPGet(url, onStartCb, onCompleteCb) 
{ 
    var xhr = GetXHR(); 
    // Construct your own xhr object that contains the url and the xhr object itself. 
    var myXhr = { xhr: xhr, url: url }; 

    xhr.onreadystatechange = function() 
    { 
    if (xhr.readyState == 4 && xhr.status == 200) 
    { 
     onCompleteCb(myXhr); 
    } 
    }; 

    xhr.open("GET", url); 
    onStartCb(myXhr); 
    xhr.send(null); 
} 

ben yoğun bu test değil ama çalışması gerekir ve bazı değişiklikler (hata işleme, geçen parametreler, vs) ile muhtemelen çevirmek mümkün olmalıdır Bu örnek tamamen işlevsel bir çözüme.

+0

yılında farkındayım olarak kullanılamaz evet bu ancak olmadan hızlı bir galibiyet için umuyordum en iyi yaklaşım olacağını, uzatma için bir sorun değildir Şu anda birlikte çalışıyorum tüm js refactor ihtiyacı. Yanıt için alkışlar – redsquare

+0

Şu anda kullandığınız kodlardan bazılarını sağlayabiliyorsanız, kodunuzu önemli ölçüde değiştirmek zorunda kalmadan bu işlevselliği eklemenin zarif bir yolunu bulmak mümkün olabilir. XHR nesnelerine maymun-yama yapmak mümkün olmalıdır (bunu test etmedim, tho) geri dönüşünüze dönüyorsunuz (değil mi?). –

5

https://developer.mozilla.org/en/XmlHttpRequest'a göre, yükseltilmiş ayrıcalıklarınız varsa, channel elde edebilirsiniz; ancak, channel standart dışıdır (diğer tarayıcılarda çalışmayabilir) ve gerçekten de http://www.w3.org/TR/XMLHttpRequest/ adresindeki W3C özellikleri channel'dan veya "istek URL'sini ayıklamak" için başka bir yoldan bahsetmez. Bu nedenle, tarayıcılarda bu kadar makul bir şekilde yapılmasının bir yolu olmadığından şüpheleniyorum.

+0

bu bilgileri alma (bu ayrıcalıklı erişimi vardır) ancak bildiğim kadarıyla, normal XMLHttpRequest kullanımı –

27

jQuery'yi kullanıyorsanız, jqXHR nesnesini değiştirmek için AJAX isteğindeki "beforeSend" işlevini kullanabilirsiniz. Yani çeşitli geri aramaları geçirilen

$.ajax({ 
... 
url: "http://some/url", 
beforeSend: function(jqxhr, settings) { jqxhr.requestURL = "http://some/url"; }, 
... 
}); 

jqXHR nesne o zaman erişebilmesi değişkeni jqXHR.requestURL sahip olacaktır.

Aşağıdakilerden ile
+4

'jqxhr.requestURL = settings.url' komutunu yaparsanız, global olarak bir' $ .ajaxSetup' çağrısında ayarlayabilirsiniz. –

15

hiçbir sarmalayıcı kesmek gereklidir:

var xhrProto = XMLHttpRequest.prototype, 
    origOpen = xhrProto.open; 

xhrProto.open = function (method, url) { 
    this._url = url; 
    return origOpen.apply(this, arguments); 
}; 

Kullanımı:

var r = new XMLHttpRequest(); 
r.open('GET', '...', true); 
alert(r._url); // opens an alert dialog with '...' 
İlgili konular