2017-06-05 3 views
0

Ich kann kein JSON-Objekt an XMLHttpRequest() senden. Wenn ich jedoch string-Daten über send() sende, funktioniert es. Zum Beispiel arbeitet der folgende Code:Es konnte kein JSON-Objekt an XMLHttpRequest gesendet werden

var xhr = new XMLHttpRequest(); 
var url = 'https://xyz.info/api/contacts'; 
xhr.open("POST", url,true); 
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 

xhr.onreadystatechange = function() {//Call a function when the state changes. 
    if(xhr.readyState == XMLHttpRequest.DONE && xhr.status == 200) { 
       // Request finished. Do processing here. 
    } 
} 
xhr.send("apikey=ee694eabf9e3&firstname=Raja1&lastname=Kumars&phone=123456"); 

Allerdings, wenn ich versuche, Daten unter Verwendung von JSON zu schicken, es nichts an die URL postet. Der folgende Code funktioniert nicht.

var xhr = new XMLHttpRequest(); 
var url = 'https://xyz.info/api/contacts'; 
    xhr.open("POST", url,true); 
    //xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    xhr.setRequestHeader("Content-Type", "application/json"); 

    xhr.onreadystatechange = function() {//Call a function when the state changes. 
    if(xhr.readyState == XMLHttpRequest.DONE && xhr.status == 200) { 
      // Request finished. Do processing here. 
     } 
    } 
    xhr.send(JSON.stringify({ 
        'apikey' :'ee6915d4ee4b4df66bba82277e3', 
        'firstname' : 'Kumar', 
        'lastname' : 'Sunder', 
        'phone':'5557773334' 
    }));   
+1

Im zweiten Beispiel senden Sie eine Zeichenfolge. Nicht gerade ein Json-Objekt. – Matthias

+0

@Matthias eine String-Darstellung eines Javascript-Objekts, obwohl. Ich weiß immer noch nicht, was ein JSON-Objekt ist (existiert nicht). – James

+0

Dumme Frage, aber unterstützt die API Beiträge vom Typ 'application/json'? Haben Sie auf der Browser-Registerkarte "devtools" des Netzwerks nachgesehen, um zu sehen, was Ihr Code tatsächlich veröffentlicht? – James

Antwort

0

Sie senden in Ihren zwei Anrufen sehr unterschiedliche Informationen. Einiger Beispielcode:

var _stringify = JSON.stringify({ 'apikey' :'ee6915d4ee4b4df66bba82277e3', 'firstname' : 'Kumar', 'lastname' : 'Sunder', 'phone':'5557773334' }); console.log(_stringify); var _orig = "apikey=ee694eabf9e3&firstname=Raja1&lastname=Kumars&phone=123456" var _encoded = encodeURI(_stringify); console.log(_orig); console.log(_encoded); wenn Ihre ursprüngliche Zeichenfolge an das Konsolenprotokoll gedruckt wird, es sieht aus, als man erwarten würde:

apikey=ee694eabf9e3&firstname=Raja1&lastname=Kumars&phone=123456 wenn das Ergebnis der JSON.stringify auf die Konsole ausgegeben wird, gibt sie: {"apikey":"ee6915d4ee4b4df66bba82277e3","firstname":"Kumar","lastname":"Sunder","phone":"5557773334"} Das heißt, es kommt komplett mit vielen zusätzlichen doppelten Anführungszeichen und linken und rechten Klammern. Wenn Sie all dies als Zeichenfolge (wie im ersten Beispiel) senden möchten, müssen Sie das Ergebnis des JSON.stringify-Aufrufs mit URI codieren. Dies geschieht mit der Variable "_encoded", die folgendes enthält: %7B%22apikey%22:%22ee6915d4ee4b4df66bba82277e3%22,%22firstname%22:%22Kumar%22,%22lastname%22:%22Sunder%22,%22phone%22:%225557773334%22%7D

0

Sie senden über eine POST-Aktion, aber senden dann die Daten über eine URL-Zeichenfolge. Wenn Sie es so senden möchten, müssen Sie es auf GET setzen.

+0

Ich sehe das nicht. Der erste Fall ist ein POST über den traditionellen HTML-Formulartyp, der zweite ist POST über den Anwendungs ​​/ JSON-Typ. Es stimmt, dass die Datenserialisierung von 'application/x-www-form-urlencoded' einer Querystring ähnelt. – James

Verwandte Themen