2015-04-21 9 views
7

'de çalışıyor JQuery $ .ajax yöntemini kullanması gereken bir web sayfasında çalışan bir komut dosyası var (şu anda jquery 1.7.2 kullanıyor) Farklı bir alan adındaki bir hizmet bitiş noktasına birkaç GET isteği göndermek. IE'de çalışan ajax çağrısı var (9, 10, 11), fakat Firefox ve Chrome'da 401 yetkisiz bir yanıtla başarısız oluyor. Chrome'daki ek hata iletisinin bir kısmı "Bu kaynağa erişmek için tam kimlik doğrulama gereklidir".

Benim ajax çağrıdır böyle kurulumu (dataType başarısız bu istekler için "json" olduğunu ve zaman uyumsuz doğrudur):

$.ajax({ 
     url: url, 
     type: "GET", 
     async: isAsync, 
     dataType: dataType, 
     username: user, 
     password: pswd, 
     success: function (response, status) { 
     // success code here 
     }, 
     failure: function (response, status) { 
     // failure code here 
     }, 
     complete: function (xhr, status) { 
     // on complete code here 
     } 
    }); 

Ben hizmete erişmek için gerekli kullanıcı adı ve şifre geçen am ve Bu IE çalışır. JQuery ajax işlevinin kimlik doğrulamasını doğru bir şekilde ele alacağını anlıyordum, bu nedenle yetkilendirmenin gerekli olduğunu belirten bir yanıt gelirse, bu isteği doğru yapmak için sağlanan kimlik bilgilerini kullanır. Burada bir şey mi eksik? Bunun çalışması için Yetkilendirme başlığını el ile eklemem gerekir mi? GÜNCELLEME

: Burada

Chrome (bazı bilgiler [... kaldırılan ...] ile değiştirilir) F12 hata ayıklama araçları aracılığıyla Chrome ve IE tarafından bildirilen istek, cevap ve çerez bilgileri (42,0 olduğunu .2311.90 m)

Yanıt Başlıkları

erişim denetim uygulamaya izin verme kimlik: true erişim denetim izin-orijin: [... kaldırılan ...] erişim denetim maruz -hea ders: önbellek denetimi: özel, en çok yaş = 0, bağlantıyı yeniden doğrula: bekletme içerik-kodlama: gzip içerik uzunluğu: 296 content-type: text/html; charset = ISO-8859-1 tarih: Sal, 21 Nis 2015 20:55:12 GMT geçerlilik süresi: Sal, 21 Nis 2015 20:55:12 GMT p3p: CP = "NON DSP COR CURa PSAa PSDa NOR BUS PUR COM NAV STA" set çerez: jsessionid = qd-uygulama-1348vf1vrksvc76oshcwirvjp.qd-app-13; yol = /; Secure; HttpOnly set-cookie:! NSC_vt1.sbmmzefw.dpn - IUUQT = ffffffff09091c3945525d5f4f58455e445a4a42378b; yol = /; güvenceye; httponly durumu: 401 İzinsiz olarak değişiklik gösterebilir: Accept-Encoding sürümü: HTTP/1.1 www kimlik doğrulaması: Temel bölge = "Ralli ALM"

Talep Başlıkları

: konak: rally1.rallydev.com: yöntemi: GET: yolunu: [... kaldırılan ...] : şeması: https: sürümü: HTTP/1.1 kabul ediyoruz: application/json, metin/javascript, /; q = 0.01 kabul-kodlama: gzip, deflate, sdch kabul dili: en-US, tr; q = 0.8 köken: [... kaldırıldı ...] referer: [... remove ...] kullanıcı Ajan: Mozilla/5.0 (Windows NT 6.1; WOW64'ni) AppleWebKit/537,36 (KHTML, Gecko benzeri) Krom/42.0.2311.90 Safari/537,36

Tepki Çerezler

jsessionid qd-app-1348vf1vrksvc76oshcwirvjp.qd -app-13 NSC_vt1.sbmmzefw.dpn! -!IUUQT ffffffff09091c3945525d5f4f58455e445a4a42378b

IE 11

talep Başlıkları

talep GET [... kaldırılan ...] Referans [... kaldırılan ...]
uygulamayı kabul/json, text/javascript, /; q = 0,01 Accept-Language en-US Kabul-Kodlama gzip, Kullanıcı Aracısı Mozilla/5.0'ı (Windows NT 6.1; WOW64; Trident/7.0; rv: 11.0) Gecko Host gibi [... kaldırıldı ...] Bağlantı-Alive Cache-Control no-cache Cookie
JSESSIONID = qd-app-08xmftgye78tde1b0wzcl2kit4m.qd-app-08; NSC_vt1.sbmmzefw.dpn! -! IUUQT = ffffffff09091c3145525d5f4f58455e445a4a42378b; RALLY-Detay-treeCollapsed = false; ZSESSIONID = RpKo5acfRqmjPhW0vIU1rgurWmDhlka0lrGCY9MIWhU; SUBBUCKETID = 713

Yanıt Başlıkları

Tepki HTTP/1.1 200 OK RallyRequestID Thu sona eriyor-08xmftgye78tde1b0wzcl2kit4m.qd-uygulama-0810353108 qd-app, 1970 00:00:00 GMT Content-Type metin 01 Oca/javaScript; charset = utf-8 ETag "0101c2c8d3463ee3c1a4f950d4142b7d3" P3P CP = "NON DSP COR Cura psaA PSDa BİZİM NOR OTOBÜS PUR COM NAV STA" Cache-Control özel, max-age = 0, olmalı-revalidate Tarih Sal, 21 Nisan 2015 20:58:17 GMT Bağlantı canlı tutma Set-Cookie ZSESSIONID = RpKo5acfRqmjPhW0vIU1rgurWmDhlka0lrGCY9MIWhU; Yol = /; Alan = [... kaldırılan ...]; Secure; HttpOnly Set-Cookie SUBBUCKETID = 713; Yol =/; Alan = [... kaldırılan ...], elde edin, HttpOnly içerik-uzunluk 319

Tanımlama

Gönderilen jsessionid qd-uygulama-08xmftgye78tde1b0wzcl2kit4m.qd-uygulama-08 012 NSC_vt1.sbmmzefw.dpn Gönderilen -! IUUQT ffffffff09091c3145525d5f4f58455e445a4a42378b Gönderilen ZSESSIONID Gönderilen sahte RALLİ-Detay-treeCollapsed RpKo5acfRqmjPhW0vIU1rgurWmDhlka0lrGCY9MIWhU Evet [... kaldırılan ...]/oturuma sonunda ZSESSIONID RpKo5acfRqmjPhW0vIU1rgurWmDhlka0lrGCY9MIWhU Alınan SUBBUCKETID 713 Gönderilen Evet [... ... kaldırılmış] oturumun sonunda SUBBUCKETID 713 Alınan/

+0

Krom veya firefox'ta geliştirici araçlarını kullanarak hata ayıklamayı denediniz mi? – brso05

+0

Ağ trafiğine bakın ve isteğin ve yanıtın ne tür bir istek ve yanıt aldığınızı görün, örn. – brso05

+0

'401' genellikle sunucu tarafından iade edilir. Uzak etki alanına (çerezleri, HTTP auth'ı kullanarak mı yoksa başka bir şekilde mi?) Doğrulanıyorsunuz. Tarayıcınız, tüm durumlarda gerekli kimlik doğrulamasını göndermiyor olabilir. – arcyqwerty

cevap

6

Evet Evet ben bu konuda bazı ek bilgiler vardı bir jquery forum post geldi. Orada ne buldum dayanarak, $ .ajax çağrısına bu ekledi:

beforeSend: function (xhr) { 
    xhr.setRequestHeader('Authorization', makeBaseAuth(user, pswd)); 
    } 
makeBaseAuth() böyle btoa() fonksiyonunu kullanır

: içinde çalışıyor gibi görünüyor

makeBaseAuth: function(user, pswd){ 
     var token = user + ':' + pswd; 
     var hash = ""; 
     if (btoa) { 
     hash = btoa(token); 
     } 
     return "Basic " + hash; 
    } 

Artık Chrome, giriş istemi veya 401 cevabı almıyorum, istek devam ediyor ve beklenen yanıtı alıyorum. Ayrıca, xhrFields: { withCredentials: true } seçeneğini gerekli görmediği gibi kaldırdım.Bazı nedenlerle bu henüz Firefox'ta çalışmıyor ve Firefox hata ayıklayıcısında aslında sorunun ne olduğunu görmek için herhangi bir hata ayıklama yapamıyorum. Bu betiğin çalışma şekli bir web sayfasına yüklendi. anonim bir betik olarak ve üzerinde herhangi bir kontrolüm yok. IE ve Chrome'daki betiğe ulaşmanın bir yolu var, ama bir nedenden dolayı Firefox'u kullanmam. Bunu, Chrome'da çalışmaya başladığım için kazanacağım, doğru yönde beni teşvik eden herkese teşekkürler!

İlgili konular