Internet Explorer en mode de compatibilité récupère les données du serveur dans une méthode de rappel ajax et ouvre une boîte de dialogue si je souhaite enregistrer les données ou les ouvrir. Comment se débarrasser de ça?
le client dit:
$.ajax({
type:'POST',
data: $("#UIdlgHolder > form").serialize(),
url: $("#UIdlgHolder > form").attr("action"),
success: function (data, textStatus, jqXHR) {
{
alert(data.message);
}
}
réponses du serveur:
return new JsonResult { Data = new { result = false, message = "Yay!" } };
On dirait que cette question SO peut vous intéresser:
Si non:
Avez-vous essayé de définir le type de données attendu dans les options ajax? i.e. dataType: 'json'
Avez-vous essayé d'autres types de contenu tels que "application/json" ou "text/javascript"
Même si ce n'est pas censé être le bon moyen, définir le type de contenu sur text/html a permis à IE de gérer cela correctement pour moi:
return Json(result, "text/html");
Fonctionne dans toutes les versions fournies par les outils F12 dans IE9.
Si vous utilisez MVC, une solution consiste à implémenter un contrôleur de base dans lequel vous override (masquez) la méthode Json (objet) comme suit:
public class ExtendedController : Controller
{
protected new JsonResult Json(object data)
{
if (!Request.AcceptTypes.Contains("application/json"))
return base.Json(data, "text/plain");
else
return base.Json(data);
}
}
Désormais, tous vos contrôleurs peuvent hériter de ExtendedController et appeler simplement return Json(model);
...
Json(data, "text/plain")
dans vos différentes méthodes d'action AjaxCela fonctionne avec les requêtes json qui afficheraient sinon le message "Ouvrir ou Enregistrer" dans IE8 et IE9, telles que celles de jQuery File Upload
Avez-vous essayé d'envoyer votre demande ajax en utilisant la méthode POST? Vous pouvez également essayer de définir le type de contenu sur 'text/x-json' tout en renvoyant le résultat du serveur.
Malheureusement, il ne s’agit là que d’une excuse supplémentaire pour utiliser Internet Explorer.
La solution simple consiste à exécuter un petit fichier .reg sur votre PC, pour indiquer à IE d'ouvrir automatiquement les fichiers .json, plutôt que de demander si vous voulez l'ouvrir/le sauvegarder.
J'ai mis une copie du fichier dont vous aurez besoin ici:
Vous aurez besoin de droits d'administrateur pour exécuter ceci.
J'ai changé le type de contenu en "text/html" au lieu de "application/json" côté serveur avant de renvoyer la réponse. Décrit cela dans un article de blog, où d'autres solutions ont également été ajoutées:
http://blog.degree.no/2012/09/jquery-json-ie8ie9-treats-response-as-downloadable-file/
Le code javascript ci-dessus est-il celui que vous utilisez dans votre application Web? Si tel est le cas, je voudrais y signaler quelques erreurs: fonction de rappel deuxièmement - il n’a pas de signe ')' après la définition du rappel ajax . Le code valide devrait ressembler à ceci:
$.ajax({
type:'POST',
data: 'args',
url: '@Url.Action("PostBack")',
success: function (data, textStatus, jqXHR) {
alert(data.message);
}
});
essayez d'utiliser le code ci-dessus - il m'a donné l'alerte 'Yay' sur toutes les 3 versions IE (7,8,9).
J'ai fait face à cela en utilisant plugin jQuery FileUpload .
Ensuite, j’ai jeté un coup d’œil dans leur documentation, plus précisément dans la section Négociation de type de contenu et ai suivi leur suggestion de Ruby/Rails.
render(json: <some-data>, content_type: request.format)
Ce qui a résolu le problème pour moi.
Explication rapide: pour les anciennes versions d'IE/Opera, ce plugin utilisera un iframe avec text/plain
ou text/html
type-contenu. Ainsi, si vous forcez la réponse à json
, le navigateur tentera de le télécharger. L'utilisation du même type de contenu que dans la demande le fera fonctionner pour n'importe quel navigateur.
Dans mon cas, IE11 semble se comporter de la sorte quand il y a une erreur de syntaxe JS dans la console (peu importe où exactement) et que dataType: 'json'
n'a aucun effet.