Problèmes avec jQuery, ajax et jsonp

J'utilise jsonp et ajax pour accéder à un service Web sur un autre serveur. Voici le jQuery:

$.ajax({ type: 'GET', url: wsurl + 'callback=?', dataType: 'jsonp', crossDomain: true, error: function(data) { console.log('error', data); }, success: function(data) { console.log('success', data); }, complete: function() { console.log('done'); } }); 

Le problème est que le rappel d'erreur est appelé. Cela me donne cette information merveilleusement utile:

 { readyState: 4, status: 200, statusText: "success" } 

Et voici le fichier json que j'appelle:

 { "id": 0, "room_number": "0", "first_name": "Admin", "last_name": "Istrator", "password": "", "salutation": "Mr.", "telephone": "", "email": "", "description": "admin", "checkin_date": 915797106000, "checkout_date": 4071557106000, "last_login_date": 947333106000, "active_status": true, "created_date": 915797106000, "created_by": 0, "reference_id": "" } 

J'ai d'abord essayé d'utiliser la méthode getJSON jQuery avec le même résultat. Je pensais essayer la méthode base ajax, car elle a un peu plus de contrôle, mais comme vous pouvez le voir, pas de chance. Alors, notez-vous tout ce que je fais mal? Avez-vous une idée de pourquoi il lançait une erreur et me donnait une valeur réussie pour la propriété statusText?

MODIFIER

D'accord, j'ai ajouté quelques options à l'appel ajax et supprimé le paramètre de rappel de l'url. Voici le nouvel appel ajax:

  $.ajax({ type: 'GET', url: wsurl, dataType: 'jsonp', crossDomain: true, error: function(xhr, textStatus, errorThrown) { console.log('textStatus: ' + textStatus); }, success: function(data) { console.log('success'); console.log(data); } }); 

Je reçois une nouvelle erreur, ce qui est bon, je suppose, mais ne fonctionne toujours pas. La différence est que le texteStatus est maintenant "parsererror". La console lance également une erreur de syntaxe sur la ligne un du fichier json:

 Uncaught SyntaxError: Unexpected token : 

Des idées?

D'accord, quelques choses me sautaient:

 $.ajax({ type: 'GET', #You do not need to append the callback as you have jsonp configured it will do it #automatically append the callback=<auto generated name> url: wsurl, dataType: 'jsonp', crossDomain: true, error: function(data) { console.log('error', data); }, success: function(data) { console.log('success', data); }, complete: function() { console.log('done'); } }); 

De plus, votre retour ne semble pas être enveloppé dans une fonction requise pour que jsonp fonctionne.

 <auto generated name>({ json object }) 

La fonction de rappel sera nommée par jquery automatiquement. Vous avez donc besoin d'un service qui prend un paramètre de rappel et renvoie un objet json avec un rembourrage.

Je ne sais pas si c'est le problème, mais votre URL n'est pas correcte. Selon les documents jQuery, il devrait ajouter automatiquement le? Callback =? pour toi:

http://api.jquery.com/jQuery.ajax/

Supprimez le rappel de l'URL et essayez d'enrouler votre json avec quelque chose comme ceci (exemple php, $ _GET ['callback'] est défini automatiquement par jQuery):

 $_GET['callback'] . '({ "id": 0, "room_number": "0", "first_name": "Admin", "last_name": "Istrator", "password": "", "salutation": "Mr.", "telephone": "", "email": "", "description": "admin", "checkin_date": 915797106000, "checkout_date": 4071557106000, "last_login_date": 947333106000, "active_status": true, "created_date": 915797106000, "created_by": 0, "reference_id": "" })'