2012-11-21 98 views
3

我正在嘗試調用託管在本地主機上的web服務。這個AJAX調用適用於我,我可以看到在服務請求頭中發送的「授權」令牌。當在Azure雲上託管WebService時,Jquery AJAX調用失敗

$.ajax({ 
     type: method, 
     url: serviceUrl, 
     beforeSend: function (XMLHttpRequest) { XMLHttpRequest.setRequestHeader("Authorization", Token); }, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     ProcessData: true, 
     cache: false, 
     success: successHandler, 
     error: errorHandler 
    }); 

但這次我嘗試調用它在Azure雲和相同的AJAX調用託管工程服務,但它不會發送content.I我使用Fiddler檢查請求的頭內容的標題。有什麼我可以做的,以便頭部有「授權」令牌?

回答

2

它可能是一個跨域策略限制。你必須確保ajax調用和服務在同一個域中,否則你將不得不做一些黑客工作來實現它。

+0

我託管的應用程序(從中進行ajax調用)和Azure雲上的WebService都處於同一個域中。但是我仍然沒有看到令牌在ajax請求的頭部中發送。是否有我能做的事情,以便我可以找到根本原因? –

0

security policies at the browser level來防止跨域AJAX調用。這有多種解決方法(such as using XML instead of JSONthis jQuery plugin),但最「正確」好像是using JSONP instead of JSON,我認爲你可以做到這在你的AJAX調用改變dataType

$.ajax({ 
    //...etc. 
    dataType: "jsonp", 
    //...etc. 
}); 

如果這不是問題,請嘗試將return true;添加到您的beforeSend處理程序中。 The request gets canceled if that returns false,但我不知道如果它根本沒有返回值會發生什麼。

+0

我改變了dataType:「jsonp」,但即使這似乎並沒有解決這個問題。我仍然沒有看到任何數據在AJAX請求的頭部中發送。 –

+0

@AbhishekJ - 嘗試在我的編輯建議。 –

+0

我嘗試過,但仍然無法正常工作。是否還有其他問題不允許ajax調用在標頭中發送令牌? –