2012-11-23 13 views
6

jQuery:jQuery AJAX "200 OK", ma nessuna risposta dati

$.ajax({ 
url : url, 
type : 'GET', 
dataType: 'json', 
data: { 
    'FN' : 'GetPages', 
    'PIN' : '7659' 
}, 
xhrFields: { 
    withCredentials: true 
}, 
crossDomain: true, 
success: function(data) { 
    alert('succsess'); 
    console.log('data', data); 
}, 
error: function (xhr, ajaxOptions, thrownError) { 
    alert('error'); 
    console.log(xhr.status); 
    console.log(thrownError); 
} 
}); 

Firebug per Firefox rete

Firebug Error http://s14.directupload.net/images/121123/8ar5vljg.png

Cosa succede

L'AJAX "errore:" l'evento ottiene t riggered e il mio console.log uscite sono:

xhr.status -> 0

thrownError -> (empty String)

è normale? Quando digito l'URL in un browser, ricevo un download di file con il contenuto JSON, non dovrebbe essere un problema, giusto?

+0

Su un url del browser la risposta è: [{"pg": 0, "descr": "PC1"}, {"pg": 1, "descr": "PC2"}, {" pg ": 2," descr ":" PC3 "}, {" pg ": 3," descr ":" HG1 "}, {" pg ": 4," descr ":" HG2 "}, {" pg" : 5, "descr": "HG3"}, { "pg": 6, "descr": "HG4"}, { "pg": 7, "descr": "DW1"}, { "pg": 8 , "descr": "DW2"}, {"pg": 9, "descr": "CMN"}] – user1841515

+0

Inoltre, la mia comprensione è che ** jsonp ** non funzionerà perché non mi è permesso di cambiare nulla su il server e la sua risposta rimarranno nel formato json e non nel formato jsonp – user1841515

+0

jsonp non influenzerà il server. Ma può aiutare a risolvere i problemi CORS. Potrebbe essere la tua unica opzione senza modificare il server – JonWells

risposta

10

Grazie a @CrimsonChin So che è un Stesso problema Origin Policy

In computing, the same origin policy is an important security concept for a number of browser-side programming languages, such as JavaScript. The policy permits scripts running on pages originating from the same site to access each other's methods and properties with no specific restrictions, but prevents access to most methods and properties across pages on different sites.[1]

(da http://en.wikipedia.org/wiki/Same_origin_policy)

Concessione client JavaScript accesso di base alle risorse richiede semplicemente l'aggiunta di intestazione della risposta HTTP uno, vale a dire :

Access-Control-Allow-Origin: * 
Access-Control-Allow-Origin: http://foo.example.com 

(da http://enable-cors.org/)

Ofc, anche la risposta JSON in una risposta JSONP funzionerebbe. Thx @djakapm

2

smusso capito dall'immagine, ma se si sta cercando invia una richiesta AJAX per dominio diverso, è necessario utilizzare JSONP, semplice richiesta AJAX non sarà sufficiente

tenta di modificare dataType: 'json'-dataType: 'jsonp'

e aggiungere al vostro callback=?URL

+0

Ok così ho provato e ho ricevuto il seguente errore: \t Errore di sintassi descr ":" DW1 "}, {" pg ": 8," descr ":" DW2 "}, {" pg ": 9, "descr": "CMN"}] – user1841515

+0

E errore: jQuery172046435253250156217_1353659110552 non è stato chiamato – user1841515

+0

Hai il controllo sulla risposta del server? in php Di solito danno una risposta come questa: $ _GET ['callback']. '()'. simulerà una funzione javascript chiamata – djakapm

3

Provate questo

$.ajax({ type : "GET", 
      url : URL, 
      data: { 
      'FN' : 'GetPages', 
      'PIN' : '7659' 
      }, 
      xhrFields: { 
      withCredentials: true 
      }, 
      crossDomain: true, 
      dataType : "jsonp", 
      jsonp : "jsoncallback", 
      jsonpCallback : "SMS", 
      cache : true, 
       success : function(service_data) { 


         }, 
       error : function(msg) { 
       alert(JSON.stringify(msg)); 
       } 
      }); 
+0

Ho eseguito questo codice e ho ricevuto la seguente casella di avviso: { "readyState": 4, "status": 200, "statusText": "il successo"} E in Firebug consolarmi un errore: SyntaxError: carattere illegale nella ** ** JSON risposta "descr" : "CMN"}] <- e una freccia che punta a quel punto interrogativo che non dovrebbe essere lì !? – user1841515

+0

@ user1841515 prova ad eseguire il servizio_data tramite json lint (http://jsonlint.com/) per assicurarti che il json sia formattato correttamente – JonWells

+0

@CrimsonChin Ho copiato il json ed eseguito un controllo -> Valido JSON – user1841515

Problemi correlati