2016-08-09 147 views
0

Ich habe eine API ich mit, dass erfordert einen benutzerdefinierten Content-Type-Header gesetzt werden, wobei der Wert text/xmlmcEinstellen eines individuellen Content-Type xmlhttprequest

ich diese

Xmlmc.prototype.submitRequest = function (request,callback) { 
    var self = this; 
    var port = portMap[request.service] || 5015; 
    var endpoint = this.endpoint = 'http://' + this.server + ':' + port; 
    var xml = request.toXml(); 
    var xhttp; 
    if (window.XMLHttpRequest) { 
     xhttp = new XMLHttpRequest(); 
    } else { 
     // IE 5 and 6 makes us sad. Please don't use it 
     xhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    //handle request 
    xhttp.onreadystatechange = function() { 
     if (xhttp.readyState == 4) { 
      var response = self.handleResponse(xhttp); 
      callback(response); 
     } 
    }; 

    xhttp.open('POST',endpoint,true); 
    xhttp.setRequestHeader('Content-type', 'text/xmlmc'); 
    //xhttp.setRequestHeader('Content-length', xml.length.toString()); 
    if(this.sessionCookie != '') { 
     xhttp.setRequestHeader('Cookie', this.sessionCookie); 
    } 
    xhttp.send(xml); 
}; 
wie so implementiert haben zu Schnittstelle versuche

der Endpunkt ist localhost:5015

Wenn ich das tue, die Anforderung fehlschlägt und nie sendet sogar. Wenn ich einen Standardanforderungsheader wie 'text/plain' verwende, wird die Anforderung gesendet, aber ein Statuscode von 501 wird nicht implementiert zurückgegeben. Wie kann ich einen benutzerdefinierten HTTP-Header in einem xmlhttprequest festlegen?

+0

"Die Konsole meldet, dass dies ein Cross-Origin-Problem ist" - Was haben Sie also getan, um es zu lösen? – Quentin

+0

Es gibt viele SO-Fragen, die sich mit dem Umgang mit ursprungsübergreifenden Problemen befassen. Da Sie den Server steuern, sollten Sie in der Lage sein, den Header "Access-Control-Allow-Origin" zu verwenden, um ihn zu autorisieren. – Barmar

+0

Entschuldigung, ich habe das Problem behoben, ich werde meine eigene Antwort posten und lösen – richbai90

Antwort

0

Es stellt sich heraus, dass dies aufgrund eines Kreuzursprungs Problem war. Selbst wenn die Domain identisch ist, ist es ein Problem, wenn die Ports unterschiedlich sind. Ich habe das Problem behoben, indem ich meiner Apache-Konfiguration einen Reverse-Proxy hinzugefügt habe und jetzt kann ich die API ohne Ursprungs-Anfragen abfragen. Leider kann ich die API nicht ändern und Cross-Origin-Domains zulassen.