J'ai implémenté une requête Ajax sur mon site Web et j'appelle le terminal à partir d'une page Web. Il retourne toujours 200 OK , mais jQuery exécute l'événement error. J'ai essayé beaucoup de choses, mais je ne pouvais pas comprendre le problème. J'ajoute mon code ci-dessous:
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);
}
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 chaîne ("Record deleted")
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?
jQuery.ajax
tente de convertir le corps de la réponse en fonction du paramètre dataType
spécifié ou de l'en-tête Content-Type
envoyé par le serveur. Si la conversion échoue (par exemple, si le code JSON/XML n'est pas valide), le rappel d'erreur est déclenché.
Votre code AJAX contient:
dataType: "json"
Dans ce cas, jQuery:
Evalue la réponse en tant que JSON et retourne un objet JavaScript. […] Les données JSON sont analysées de manière stricte. tout JSON mal formé est rejeté et une erreur d'analyse est renvoyée. […] Une réponse vide est aussi rejeté; le serveur doit plutôt renvoyer une réponse nulle ou {}.
Votre code côté serveur renvoie un extrait HTML avec le statut 200 OK
. jQuery attendait un JSON valide et déclenche donc le rappel d'erreur en se plaignant de parseerror
.
La solution consiste à supprimer le paramètre dataType
de votre code jQuery et à renvoyer le code côté serveur:
Content-Type: application/javascript
alert("Record Deleted");
Mais je suggérerais plutôt de renvoyer une réponse JSON et d'afficher le message dans le rappel de réussite:
Content-Type: application/json
{"message": "Record deleted"}
J'ai eu de la chance avec l'utilisation de dataType
s ( jQuery 1.5+ ) séparés par des espaces. Un péché:
$.ajax({
type: 'POST',
url: 'Jqueryoperation.aspx?Operation=DeleteRow',
contentType: 'application/json; charset=utf-8',
data: json,
dataType: 'text json',
cache: false,
success: AjaxSucceeded,
error: AjaxFailed
});
Vous devez simplement supprimer le dataType: "json" dans votre appel AJAX
$.ajax({
type: 'POST',
url: 'Jqueryoperation.aspx?Operation=DeleteRow',
contentType: 'application/json; charset=utf-8',
data: json,
dataType: 'json', //**** REMOVE THIS LINE ****//
cache: false,
success: AjaxSucceeded,
error: AjaxFailed
});
Ceci est juste pour le compte rendu puisque je suis tombé sur ce post lorsque je cherchais une solution à mon problème qui ressemblait à celle du PO.
Dans mon cas, ma requête jQuery Ajax n'a pas pu aboutir à cause de same-Origin policy in Chrome. Tout a été résolu quand j'ai modifié mon serveur (Node.js) pour faire:
response.writeHead(200,
{
"Content-Type": "application/json",
"Access-Control-Allow-Origin": "http://localhost:8080"
});
Cela m'a littéralement coûté une heure de me cogner la tête contre le mur. Je me sens stupide ...
Je pense que votre page aspx ne renvoie pas d'objet JSON . Votre page devrait faire quelque chose comme ceci (page_load)
var jSon = new JavaScriptSerializer();
var OutPut = jSon.Serialize(<your object>);
Response.Write(OutPut);
Aussi, essayez de changer votre AjaxFailed:
function AjaxFailed (XMLHttpRequest, textStatus) {
}
textStatus
devrait vous indiquer le type d'erreur que vous obtenez.
J'ai fait face à 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.
Vous devez simplement 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.
J'ai eu le même problème. Mon problème était que mon contrôleur renvoyait un code d'état au lieu de JSON. Assurez-vous que votre contrôleur renvoie quelque chose comme:
public JsonResult ActionName(){
// Your code
return Json(new { });
}
Utilisez le code suivant pour vous assurer que la réponse est au format JSON (version PHP) ...
header('Content-Type: application/json');
echo json_encode($return_vars);
exit;
Regarde ça . C'est aussi un problème similaire. Travailler j'ai essayé.
Ne pas supprimer dataType: 'JSON',
Note: echo uniquement JSON Formate dans le fichier PHP si vous utilisez uniquement php echo votre code ajax retour 200
Une autre chose qui a tout gâché pour moi a été d'utiliser localhost
au lieu de 127.0.0.1 ou inversement. Apparemment, JavaScript ne peut pas gérer les demandes de l'un à l'autre.
J'ai le même problème, mais quand j'ai essayé de supprimer le type de données: 'json'. Mon erreur s'exécute à la place du succès
function cmd(){
var data = JSON.stringify(display1());
$.ajax({
type: 'POST',
url: '/cmd',
contentType:'application/json; charset=utf-8',
//dataType:"json",
data: data,
success: function(res){
console.log('Success in running run_id ajax')
//$.ajax({
// type: "GET",
// url: "/runid",
// contentType:"application/json; charset=utf-8",
// dataType:"json",
// data: data,
// success:function display_runid(){}
// });
},
error: function(req, err){ console.log('my message: ' + err); }
});
}
J'ai eu le même problème. C'était parce que ma réponse JSON contenait des caractères spéciaux et que le fichier du serveur n'était pas codé avec UTF-8. L'appel Ajax a donc considéré qu'il ne s'agissait pas d'une réponse JSON valide.
Si vous renvoyez toujours JSON depuis le serveur (pas de réponses vides), dataType: 'json'
devrait fonctionner et contentType
n'est pas nécessaire. Cependant, assurez-vous que la sortie JSON ...
jQuery AJAX lancera un 'analyseur syntaxique' sur un JSON valide mais non sérialisé!