2017-08-29 1 views
0

À partir d'un JQuery AJAX post request le serveur m'envoie une réponse qui vient de dire Bonjour, et je veux obtenir ce Bonjour comme une chaîne.IE11 interprète AJAX POST répondre en tant que chaîne, en dépit d'être tableau JSON

J'ai écrit ce code pour obtenir la valeur du texte:

var posting = $.post(
    "https://server/bla", 
    { 
     input: theinput 
    } 
); 
posting.done(function(reply) { 
    console.log(reply); 
    console.log(typeof reply); 
    console.log(reply[0]); 
} 

Il fonctionne parfaitement sur Firefox 55:

Array [ "Hello" ] 
object 
Hello 

... mais IE11 semble croire qu'il est une chaîne (même code):

["Hello"] 
string 
"[\"Hello\"]" 

j'ai écrit une solution hackish qui utilise juste pour supprimer les sous-chaîne entre parenthèses et guillemets au beginn ing et end si la variable est une chaîne, mais ne gère pas bien les guillemets dans la réponse (Hell"o devient Hell\"o).

Existe-t-il une solution plus propre?

Par ailleurs, voici le côté serveur Java code:

JSONArray jsonArray = JSONFactoryUtil.createJSONArray(); 
jsonArray.put("Hello"); 
+0

Essayez '$ .getJSON': http://api.jquery.com/jquery.getjson/ –

+0

@JeremyThille bon plan, mais ne fonctionnera pas pour une demande POST. Essayez d'utiliser '$ .ajax' et spécifiez' dataType: 'json'' explicitement. –

+0

@JeremyThille: C'est pour GET. Mon serveur ne gère que le POST. –

Répondre

1

Comme pressenti par Rory, le paramètre de type de données aide ici.

dataType Type: chaîne Type de données attendues du serveur.
Par défaut: Intelligent Guess (xml, json, script, texte, html).

Je Réécriture de la partie de la requête à ceci:

var posting = $.ajax({ 
    type: "POST", 
    url: "<%=addResUrl%>", 
    data: { 
       input: theinput 
    }, 
    dataType: "json" 
}); 

Notez le dataType: "json".

Et maintenant cela fonctionne dans IE11 de la même manière que dans Firefox: Le JSON est reconnu comme JSON.