/ / Problèmes avec jQuery, ajax et jsonp - javascript, jquery, ajax, json, jsonp

Problèmes avec jQuery, ajax et jsonp - javascript, jquery, ajax, json, 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 ces informations merveilleusement utiles:

{
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 de base ajax, car elle a un peu plus de contrôle, mais comme vous pouvez le voir, pas de chance. Alors, remarquez tout ce que je fais mal"? Avez-vous une idée pourquoi il génère une erreur et me donne 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 callback 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 bien je suppose,mais ne fonctionne toujours pas. La différence est que textStatus est maintenant "analyse syntaxique". La console génère également une erreur de syntaxe sur la première ligne du fichier json:

Uncaught SyntaxError: Unexpected token :

Des idées?

Réponses:

1 pour la réponse № 1

Ok, deux choses me sautent aux yeux:

$.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 encapsulé dans une fonction nécessaire au bon fonctionnement de jsonp.

<auto generated name>({ json object })

La fonction de rappel sera automatiquement nommée par jquery. Vous avez donc besoin d’un service qui prendra un paramètre de rappel et renverra un objet json avec un remplissage.


0 pour la réponse № 2

Pas sûr que ce soit le problème, mais votre URL n'est pas correcte. Selon la documentation jQuery, il devrait automatiquement ajouter le? Callback =? pour vous:

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


0 pour la réponse № 3

Supprimez le rappel de l’URL et essayez d’envelopper votre json avec quelque chose comme ceci (exemple php, $ _GET ["callback"] est automatiquement défini 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": ""
})"