J'ai implémenté une demande Ajax sur mon site Web et j'appelle le point de terminaison à partir d'une page Web. Il renvoie toujours 200 OK , mais jQuery exécute l'événement d'erreur.
J'ai essayé beaucoup de choses, mais je n'ai pas pu comprendre le problème. J'ajoute mon code ci-dessous:
Code jQuery
var row = "1";
var json = "{'TwitterId':'" + row + "'}";
$.ajax({
type: 'POST',
url: 'Jqueryoperation.aspx?Operation=DeleteRow',
contentType: 'application/json; charset=utf-8',
data: json,
dataType: 'json',
cache: false,
success: AjaxSucceeded,
error: AjaxFailed
});
function AjaxSucceeded(result) {
alert("hello");
alert(result.d);
}
function AjaxFailed(result) {
alert("hello1");
alert(result.status + ' ' + result.statusText);
}
Code C # pour JqueryOpeartion.aspx
protected void Page_Load(object sender, EventArgs e) {
test();
}
private void test() {
Response.Write("<script language='javascript'>alert('Record Deleted');</script>");
}
J'ai besoin de la ("Record deleted")
chaîne après une suppression réussie. Je peux supprimer le contenu, mais je ne reçois pas ce message. Est-ce correct ou est-ce que je fais quelque chose de mal? Quelle est la bonne façon de résoudre ce problème?
TwitterId
, alors vous devez passer un objet àdata
, pas une chaîne:data: {TwitterId: row}
.Réponses:
jQuery.ajax
tente de convertir le corps de la réponse en fonction dudataType
paramètre spécifié ou de l'en-Content-Type
tête envoyé par le serveur. Si la conversion échoue (par exemple si le JSON / XML n'est pas valide), le rappel d'erreur est déclenché.Votre code AJAX contient:
Dans ce cas jQuery:
Votre code côté serveur renvoie un extrait HTML avec
200 OK
état. jQuery attendait un JSON valide et déclenche donc le rappel d'erreur se plaignantparseerror
.La solution consiste à supprimer le
dataType
paramètre de votre code jQuery et à renvoyer le code côté serveur:Mais je préfère suggérer de retourner une réponse JSON et d'afficher le message dans le rappel de réussite:
la source
$.ajax
vous peuvent essayer$.getScript
. Dans le script C # côté serveur, mettez simplementalert('Record Deleted');
(sans<script>
balise) et définissez le ContentType de votre script C # surtext/javascript
.$.ajax
pourrait aussi fonctionner mais je ne me souviens pas comment, peut-être vous avez juste besoin de changerdataType: 'script',
. Vous n'aurez peut-être plus besoin du gestionnaire de réussite.$.post
. Dans ce cas, jquery devine un type de données, puis des erreurs lorsqu'il ne parvient pas à analyser . C'est un piège vraiment méchant et difficile à trouver. Je l'ai corrigé en définissant le type de données sur"text"
.J'ai eu de la chance avec plusieurs
dataType
s séparés par des espaces ( jQuery 1.5+ ). Un péché:la source
Il vous suffit de supprimer le dataType: "json" dans votre appel AJAX
la source
C'est juste pour mémoire puisque je suis tombé sur ce post lorsque je cherchais une solution à mon problème qui était similaire aux PO.
Dans mon cas, ma demande jQuery Ajax n'a pas pu aboutir en raison de la même politique d'origine dans Chrome. Tout a été résolu lorsque j'ai modifié mon serveur (Node.js) pour faire:
Cela m'a littéralement coûté une heure de me cogner la tête contre le mur. Je me sens stupide ...
la source
Je pense que votre page aspx ne renvoie pas d'objet JSON. Votre page devrait faire quelque chose comme ça (page_load)
Essayez également de modifier votre AjaxFailed:
textStatus
devrait vous donner le type d'erreur que vous obtenez.la source
J'ai rencontré ce problème avec une bibliothèque jQuery mise à jour. Si la méthode de service ne renvoie rien, cela signifie que le type de retour est
void
.Ensuite, dans votre appel Ajax, veuillez mentionner
dataType='text'
.Cela résoudra le problème.
la source
Il vous suffit de supprimer
dataType: 'json'
de votre en-tête si votre méthode de service Web implémentée est nulle.Dans ce cas, l'appel Ajax ne s'attend pas à avoir un type de données de retour JSON.
la source
Utilisez le code suivant pour vous assurer que la réponse est au format JSON (version PHP) ...
la source
J'ai eu le même problème. Mon problème était que mon contrôleur retournait un code d'état au lieu de JSON. Assurez-vous que votre contrôleur retourne quelque chose comme:
la source
J'ai le même problème mais quand j'ai essayé de supprimer le type de données: «json», j'ai toujours le problème. Mon erreur s'exécute au lieu du succès
la source
Une autre chose qui a gâché les choses pour moi était d'utiliser
localhost
au lieu de 127.0.0.1 ou vice versa. Apparemment, JavaScript ne peut pas gérer les demandes de l'un à l'autre.la source
Regardez ça . C'est aussi un problème similaire. Travailler, j'ai essayé.
Ne supprimez pas
dataType: 'JSON',
Remarque: echo uniquement JSON Formate dans un fichier PHP si vous utilisez uniquement php echo votre code ajax return 200
la source
J'ai eu le même problème. C'est parce que ma réponse JSON contient des caractères spéciaux et que le fichier serveur n'était pas codé en UTF-8, donc l'appel Ajax a considéré que ce n'était pas une réponse JSON valide.
la source
Si vous renvoyez toujours JSON du serveur (pas de réponses vides), cela
dataType: 'json'
devrait fonctionner etcontentType
n'est pas nécessaire. Assurez-vous cependant que la sortie JSON ...jQuery AJAX lancera un «analyseur» sur JSON valide mais non sérialisé!
la source
Votre script exige un retour dans le type de données JSON.
Essaye ça:
la source
Essayez de suivre
OU
Utilisez des guillemets doubles au lieu de guillemets simples dans l'objet JSON. Je pense que cela résoudra le problème.
la source