2016-06-08 39 views
0

這裏是一個Android手機applicati上,我從中進行調用SAP服務器。我穿過一個很奇怪的問題來了。 我正在對服務器進行ajax調用,並按預期獲取數據。 但問題是getResponseHeader是空的。但是我可以在瀏覽器控制檯中看到響應標題,並且符合我的預期。 如何獲得響應頭? Browser Console imagegetResponseHeader是空

var a = {}; 
    a = { 
     // object that contains HTTP headers as name value pairs 
     "Authorization" : "Basic " + btoa(username + ":" + password), 
     "X-CSRF-Token" : "Fetch",   
    }, 
$.ajax({ 
     type: "GET", 
     cache: false, 
     url: requestUri1, 
     headers: a, 
     success: function(a, b, c) { 
      globalTocken = c.getResponseHeader("X-CSRF-Token"); 
      alert(globalTocken); 
     }, 
     statusCode: { 
      401: function() { 
       alert("User name and password is wrong"); 
      }, 
      403: function() { 
       alert("error 403"); 
      } 
     }, 
     error: function(a, b) { 
      alert(b); 
     } 
    }); 

我也曾嘗試這些方法。

OData.request ({ 
      requestUri: requestUri1, 
        method: "GET", 
        headers: { 
     "Authorization" : "Basic " + btoa(user_name + ":" + pass_word), 
             "X-Requested-With": "XMLHttpRequest", 
             "Content-Type": "application/atom+xml", 
             "DataServiceVersion": "2.0",  
             "X-CSRF-Token":"Fetch" 
         }   
       }, 
       function (data, response) 
       { 
         var header_xcsrf_token = response.headers['x-csrf-token']; 
         //console.log(header_xcsrf_token); 
         alert(header_xcsrf_token); 

       },function(err) { 

        //Error Callback: 

        alert("Error occurred " + err.message + err.response.statusText); 

       }); 

另一種方式

var request = { 
    headers : { 
     // object that contains HTTP headers as name value pairs 
     "Authorization" : "Basic " + btoa(user_name + ":" + pass_word), 
     "X-CSRF-Token" : "Fetch",   
    }, 
    requestUri : requestUri1, // OData endpoint URI 
    method : "GET", 
    datatype : "json", 
}; 
OData 
     .read(
       request, 
       function(data,response) { 
        x_csrf_token = response.headers["X-CSRF-Token"]; 
       }, function(err) { 

        //Error Callback: 

        alert("Error occurred " + err.message + err.response.statusText); 

       }); 
    } 
+0

客戶端和服務器在同一個域中? – user3083618

+0

不,因爲在請求的資源上存在第一個'Access-Control-Allow-Origin'標頭。原因'空'因此不允許訪問。'錯誤即將到來。然後,我在Crome中安裝了Allow-Control-Allow-Origin:extension。現在我正面臨着這個錯誤。 –

+0

如果您調用getAllResponseHeaders(),結果如何? – user3083618

回答

0

我已經做了很多 - [R & d,達成的結論是,所有的三種編碼是正確的問題是從服務器端,它不產生令牌每次這樣我已經將令牌保存在本地內存中並使用它,直到新服務器不會從服務器生成(我每次都在向服務器發送調用消息)。它爲我工作。

function save_all(){ 
     var globalTocken,X_CSRF_Token,a = {}; 

    a.Authorization = "Basic " + btoa("username" + ":" + "password"), 
    a["X-CSRF-Token"] = "fetch", 
    $.ajax({ 
     type: "get", 
     cache: !1, 
     url: requestUri1, 
     headers: a, 
     dataType: "xml", 
     success: function(a, b, c) { 
     if(!c.getResponseHeader("X-CSRF-Token")){ 
       globalTocken = localStorage.savedTocken; 
       X_CSRF_Token = globalTocken; 
     else{ 
      globalTocken = c.getResponseHeader("X-CSRF-Token"); 
      localStorage.removeItem("savedTocken"); 
      localStorage.setItem("savedTocken",globalTocken); 
      X_CSRF_Token = globalTocken; 

     }   
     }, 
     statusCode: { 
      401: function() { 
       alert("User name and password is wrong"); 
      }, 
      403: function() { 
       alert("error 403"); 
      } 
     }, 
     error: function(a, b) { 
      alert(b); 
     } 
    });