2011-11-15 116 views
4

據我所知,這個問題被問很多次之前,但似乎沒有任何反應的工作對我來說這是我的問題,IP攝像頭:HTTP基本授權使用AJAX/jQuery的

我有一個索尼網絡攝像機即在Intranet中。我正在構建一個PHP/MySQL身份驗證網站,以便內部用戶能夠查看MJPEG流,但相機本身需要http身份驗證。我不想讓用戶輸入他們的用戶名和密碼登錄相機頁面,然後必須鍵入http驗證憑據(在彈出窗口中)才能看到該流。我試圖使用jQUERY來改變標題無濟於事。請記住,相機必須有自己的認證,以便用戶不能隨意輸入IP並看到流。我希望能夠控制誰在什麼時間觀看。

我假設,如果我在用戶登錄到頁面時進行了正確的身份驗證調用,那麼該攝像頭將對他們可用,因爲他們將「默默」登錄。此外,如果我從終端使用wget - 頭:「授權:blah_Blah」它實際上工作,但我不能從jQuery做到這一點!這裏是我的代碼:

$.ajax({ 
    url : "http://some_ip_internally_for_the_cam/some_page_on_cam_that_needs_authentication_to_access_otherwise", 
    method : 'GET', 
    beforeSend : function(req) { 
     req.setRequestHeader('Authorization', "some_base_64_stuff_that_works_in_wget"); 
    }, 
    success: function() { 
     $("div.log").attr("innerHTML", "ok"); 
    } 
}); 

此,即會加載在用戶登錄

任何建議?

+0

請顯示「some_base_64_stuff_that_works_in_wget」的例子。 – powtac

+1

https://developer.mozilla.org/En/Same_origin_policy_for_JavaScript – Anders

+0

當談到Firefox的同一起源政策時,這是否意味着它將在IE上運行? – achilles

回答

0

如果您的意思是div.log未顯示「ok」消息,則可能是因爲您的DOM代碼不正確。這:

$("div.log").attr("innerHTML", "ok"); 

設置div的DOM屬性,而不是它的實際innerHTML。相反,你應該做的:

$("div.log").html("ok"); 
+0

使用innerHTML通常是不好的編程。這一次是其中之一。使用DOM規範的內容,一切都會好的。你不需要使用innerHTML。 – brunoais

+0

沒有最終結果是認證窗口仍然彈出。即使我刪除了與div.log相關的部分代碼。我也在Firefox中得到以下錯誤: 錯誤:未捕獲異常:[異常...]組件返回失敗代碼:0x804b000f(NS_ERROR_IN_PROGRESS)[nsIXMLHttpRequest.setRequestHeader]「nsresult:」0x804b000f(NS_ERROR_IN_PROGRESS)「location:」JS frame :: http:// hide_my_address/:: :: line 35「data:no] – achilles

+0

使用text()代替html() – powtac

2

我不得不在Firefox相同的JavaScript錯誤:

... 0x804b000f (NS_ERROR_IN_PROGRESS) [nsIXMLHttpRequest.setRequestHeader] ...

當我試圖設置在一些XMLHttpRequest對象一個新的HTTP標頭:

xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); 

發生此錯誤的原因是我試圖在XMLHttpRequest.open()方法的之前設置HTTP標頭

來源: http://www.webmasterworld.com/forum91/4542.htm

+0

謝謝,這是我的問題。 – DMan

0

您是否嘗試過在阿賈克斯的用戶名和密碼字段?

$.ajax({ 
    url: "http://mydomain/mypage.php", 
    username: "myUsername", 
    password: "myPassword", 
    error: function() { 
    } 
}).done(function(html) { 
     //Do Stuff 
}); 

這對我在類似的情況下適用。