2016-06-08 17 views
0

hier ist ein Android mobile applicati auf, von dem ich Anruf an SAP SERVER bin. Ich stieß auf ein sehr seltsames Problem. Ich mache einen Ajax-Anruf zum Server und bekomme Daten wie erwartet. aber das Problem ist, dass getResponseHeader leer ist. Aber ich kann den Response-Header in der Browser-Konsole sehen und es entspricht meinen Erwartungen. Wie bekomme ich den Antwortheader? Browser Console imagegetResponseHeader ist leer

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); 
     } 
    }); 

Ich habe auch diese Art und Weise versucht.

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); 

       }); 

Ein anderer Weg

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

Client und Server sind in der gleichen Domäne? – user3083618

+0

Nein, weil der erste 'Access-Control-Allow-Origin'-Header auf der angeforderten Ressource vorhanden ist. Origin 'null' ist daher nicht erlaubt. ' FEHLER kam. Dann habe ich Allow-Control-Allow-Origin: extension in crome installiert. Jetzt stehe ich vor diesem Fehler. –

+0

Wenn Sie getAllResponseHeaders() aufrufen, was ist das Ergebnis? – user3083618

Antwort

0

ich viel R & D getan habe und zu einem Schluss gekommen, dass alle drei Codierung richtige Probleme sind, ist von der Seite Server, ist es nicht Token jedes Mal erzeugt, ist so Ich habe Token im lokalen Speicher gespeichert und benutze es, bis der neue nicht vom Server generiert wird (ich rufe jedes Mal zum Server). es funktioniert für mich.

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); 
     } 
    });