906 votes

La requête Ajax renvoie 200 OK mais l'erreur est déclenchée au lieu du succès

Salut j'ai mis en œuvre une requête Ajax sur mon site où je suis en appelant l'une de la page. Il retourne toujours à 200 OK mais execute a échoué événement, j'ai essayé beaucoup de choses mais je ne suis pas aller où je fais erreur. J'ai ajouter mon code ici, aussi s'il vous plaît vérifier et s'il vous plaît permettez-moi de l'erreur.

 var row = "1";
    var json = "{'TwitterId':'" + row + "'}";
    //var json = "pankaj";


    $.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);
    }

Mon Premier montage, je suis en ajoutant JqueryOpeartion.page aspx codage

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 cette chaîne de caractères ("Enregistrement supprimé ") après le succès de leur suppression. Je suis capable de supprimer du contenu mais je n'obtiens pas ce message. Est-ce correct ou et je suis en train de faire une erreur. Merci de me suggérer de manière correcte afin que je puisse résoudre ce problème.

S'il vous plaît aider moi.

1235voto

Salman A Points 60620

Lorsque vous spécifiez:

dataType: 'json',

jQuery déclenche l'événement d'erreur si la réponse ne peut pas être analysée comme JSON, même si le serveur renvoie 200 OK. Vérifiez les données retournées par le serveur et assurez-vous qu'il est JSON valide (essayez JSONLint service).

Si les données renvoyées sont pas JSON ou il a des erreurs de syntaxe, puis de les corriger dans votre code côté serveur. Vous pouvez simplement retourner {} à partir du serveur de script côté.

Notez qu'à l'intérieur de l'événement d'erreur, le paramètre 2 et 3 contiennent des détails sur l'erreur. En cas de JSON erreur d'analyse le paramètre 2 contiendra parsererror.

37voto

jaketrent Points 526

J'ai eu de la chance avec l'utilisation de plusieurs types de données séparés par des espaces ( Jquery 1.5+ ). 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
});
 

15voto

LeftyX Points 9899

Je suppose que votre page aspx ne retourne pas un objet JSON. Votre page devrait faire quelque chose comme ça (page_load)

    var jSon = new JavaScriptSerializer();
    var OutPut = jSon.Serialize(<your object>);

    Response.Write(OutPut);
 

Essayez également de modifier votre AjaxFailed:

 function AjaxFailed (XMLHttpRequest, textStatus) {

                }
 

textStatus devrait vous dire quel genre d'erreur vous obtenez.

2voto

Paul Points 18

Une autre chose qui a gâché les choses pour moi était d'utiliser localhost au lieu de 127.0.0.1 ou viceversa. Apparemment, JS ne peut pas gérer les demandes de l'un à l'autre.

-9voto

Salman Riaz Points 72

Essayez de suivre

 $.ajax({
    type: 'POST',
    url: 'Jqueryoperation.aspx?Operation=DeleteRow',
    contentType: 'application/json; charset=utf-8',
    data: { "Operation" : "DeleteRow", 
            "TwitterId" : 1 },
    dataType: 'json',
    cache: false,
    success: AjaxSucceeded,
    error: AjaxFailed
});
 

OU

 $.ajax({
    type: 'POST',
    url: 'Jqueryoperation.aspx?Operation=DeleteRow&TwitterId=1',
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    cache: false,
    success: AjaxSucceeded,
    error: AjaxFailed
});
 

Utilisez des guillemets doubles au lieu de guillemets simples dans l'objet JSON. Je pense que cela va résoudre le problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X