web-dev-qa-db-fra.com

Un appel Ajax déclenche un événement d'erreur mais renvoie 200 ok

$.ajax({
        url: 'http://intern-dev01:50231/api/language',
        type: 'GET',
        dataType: 'json',
        success: function() {
            console.log('It Works!');
        },
        error: function (request,status, error) {
            console.log(error);
            alert(status);
        }
    });

Pourquoi cet appel ajax ne fonctionne-t-il pas? si j'appelle dans le navigateur cela fonctionne très bien: /.

Voici ce que le violoniste retourne:

HTTP/1.1 200 OK
Content-Length: 122
Content-Type: application/json; charset=utf-8
Server: Microsoft-HTTPAPI/2.0
Date: Fri, 26 Apr 2013 06:56:40 GMT

[{"LanguageId":1,"LanguageName":"Dansk"},{"LanguageId":2,"LanguageName":"Tysk"},{"LanguageId":3,"LanguageName":"Engelsk"}]
12
user2314110

Vous devez vérifier la réponse ajax si elle est valide ou non. Lorsque vous spécifiez en ajax:

dataType: 'json',

jQuery déclenchera l'événement d'erreur si la réponse ne peut pas être analysée en tant que JSON, même si le serveur renvoie 200 OK. Vérifiez les données renvoyées par le serveur et assurez-vous qu'il s'agit d'un fichier JSON valide (essayez le service JSONLint).

Si les données renvoyées ne sont pas JSON ou s'il y a des erreurs de syntaxe, corrigez-les dans le code côté serveur. Vous pouvez simplement renvoyer {} à partir du script côté serveur.

Essayez aussi ceci.

$.ajax({
    url: 'http://intern-dev01:50231/api/language',
    type: 'GET',
    cache: false,        
    complete: function (xhr, status) {
      if (status === 'error' || !xhr.responseText) {
          console.log(error);
          alert(status);
      }
      else {
       console.log('It Works!');.
      }
    }        
});
14
Bharat Chodvadiya

Il y a une erreur d'analyse puisque l'état indique 200 OK. Le problème réside dans le type de données: json. Pour tester cela, supprimez la ligne et cela devrait fonctionner. Pour résoudre ce problème, vous pouvez le remplacer par le type de données: text. Voir ce lien aussi pour une question similaire

7
SanTheta

Vérifiez le paramètre url et assurez-vous qu'il est identique à la page chargée. Vous faites peut-être un appel ajax entre domaines. Si vous souhaitez effectuer un appel ajax entre domaines, notez que les seuls script autorisés à faire des demandes entre domaines sont "script" et "jsonp".

Couru dans ce problème dans un environnement de dev où l'URL était une adresse IP et la page chargée un nom de domaine pointant vers cette adresse IP.

0
DaveS

Je sais que je suis un peu en retard, mais je viens de rencontrer le même problème et c'est l'un des premiers résultats de recherche sur Google. J'ai réussi à le réparer en déplaçant le type de données au-dessus de l'URL comme ceci:

$.ajax({
    type: 'GET',
    dataType: 'json',
    url: 'http://intern-dev01:50231/api/language',
    success: function() {
        console.log('It Works!');
    },
    error: function (request,status, error) {
        console.log(error);
        alert(status);
    }
});
0
Senju

Si vous testez localement avec une application Web et des applications d'API Web différentes, déboguez votre application et testez l'API envoyez correctement les données et les appels d'application à l'API via AJAX et renvoyez les données.

puisque les domaines ne sont pas similaires lorsque l'exécution de l'application AJAX ne correspond pas à la fonction de réussite. car le navigateur empêche Cross Site request. Si vous publiez les deux applications en local et en débogage, tout va bien.

j'espère que ce serait utile quelqu'un.

0
dush88c