2013-04-26 9 views
11
$.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); 
     } 
    }); 

Perché questa chiamata ajax non funziona ?? se chiamo nel browser funziona bene: /.L'evento Ajax genera un evento di errore ma restituisce 200 ok

Questo è ciò che restituisce Fiddler:

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"}] 

risposta

12

Devi controllare la risposta Ajax se è valido o meno. Quando si specifica in ajax:

dataType: 'json', 

jQuery scatterà l'evento di errore se la risposta non può essere analizzato come JSON, anche se server restituisce 200 OK. Controlla i dati restituiti dal server e assicurati che sia JSON valido (prova il servizio JSONLint).

Se i dati restituiti non è JSON o ha poi errori di sintassi correggerli nel codice lato server. Puoi solo restituire {} dallo script lato server.

Prova anche questo.

$.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!');. 
     } 
    }   
}); 
+0

Se uso jsonp ottengo parseError – user2314110

+1

@ user2314110 sufficiente rimuovere dataType: 'json' e provare. Vedi la mia risposta di modifica. –

+0

Ancora appena ricevuto l'errore di avviso – user2314110

5

C'è un errore di analisi poiché lo stato mostra 200 OK. Il problema sta nel tipo di dati: json. Per verificare ciò, rimuovere la linea e dovrebbe funzionare. Per risolvere questo problema, puoi cambiarlo con il tipo di dati: testo. See this link too for similar question

+0

È proprio per questo che i miei Symfony Dynamic Form hanno attivato l'evento di errore, perché la richiesta ajax mi restituisce l'html del modulo aggiornato !!! –

+0

Stavo restituendo testo normale invece di json. –

0

So che sono un po 'in ritardo, ma mi sono imbattuto nello stesso problema e questo è uno dei risultati di ricerca principali su Google. Sono riuscito a risolvere il problema spostando tipo di dati di cui sopra URL simile a questo:

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

Fondamentalmente è una coppia di valori chiave, quindi non dovrebbe avere importanza nel modo in cui è pre-strutturata. Non penso che qualunque cosa costruisca questa richiesta gli oggetti guardino se la chiave dataType è prima o dopo qualche altra chiave. Semplicemente lo costruisce. L'obiettivo qui è trovare la vera causa. –

0

Se si verifica a livello locale con un diverso applicazioni Web App e web API, quindi eseguire il debug dell'applicazione e il test API inviare correttamente i dati e app chiamate a API tramite AJAX e dati di ritorno.

in quanto domini non sono simili quando eseguire chiamata un'applicazione AJAX non ha colpito alla funzione successo. perché il browser impedisce Cross Site request. Se pubblichi entrambe le app in local e debug, funziona bene.

speranza che questo sarebbe utile a qualcuno.

0

Controllare il parametro url e assicurarsi che il suo lo stesso della pagina caricata. Potresti effettuare una chiamata Ajax tra domini. Se si desidera effettuare una chiamata ajax tra domini, si noti che gli unici tipi di dati consentiti per effettuare richieste tra domini sono "script" e "jsonp".

imbattuto in questo problema in un ambiente dev in cui l'URL è un indirizzo IP e la pagina caricata un dominio nome di punta a quel IP.

Problemi correlati