jQuery Croix de Domaine Ajax
Mon code ajax est
$.ajax({
type: 'GET',
dataType: "jsonp",
processData: false,
crossDomain: true,
jsonp: false,
url: "http://someotherdomain.com/service.svc",
success: function (responseData, textStatus, jqXHR) {
console.log("in");
},
error: function (responseData, textStatus, errorThrown) {
alert('POST failed.');
}
});
C'est une croix de domaine requête ajax.
Je suis bonne réponse pour la demande, tout en vérifiant avec firebug je vois que la réponse.
C'est la réponse que je reçois dans firebug réponse et lors de l'accès à cette url travers d'un navigateur web
{"AuthenticateUserResult":"{\"PKPersonId\":1234,\"Salutation\":null,\"FirstName\":\"Miqdad\",\"LastName\":\"Kumar\",\"Designation\":null,\"Profile\":\"\",\"PhotoPath\":\"\/UploadFiles\/\"}"}
Mais j'obtiens l'erreur
SyntaxError: invalid label
{"AuthenticateUserResult":"{\"PKPersonId\":8970,\"Salutation\
Si j'ai besoin d'utiliser une autre méthode pour l'obtenir, il fonctionne. Je veux mettre en phonegap+jquery mobile app.
Aussi, je n'ai pas accès au service web
Si je désactive le chrome web de la sécurité, il fonctionne
Quel est le raisonnement derrière l'utilisation de ces trois options, ou avez-vous juste de les coller pour voir si elles fonctionnent:
non... c'est que j'ai ajouté pour les tests. Cette croix de domaine demande c'est pourquoi j'ai utilisé ces codes 😉
voir mise à jour de commentaire, désolé. Aucune de ces trois options ont aucun sens avec la demande que vous faites.
Si quoi que ce soit, vous devez être faire un SCRO demande, mais qui ne va fonctionner que si le service prend en charge la SCRO et nous ne pouvons pas dire si oui ou non il n'a donné ce qui a été fourni.
Pour commencer, retirez ces trois options et essayez à nouveau la demande. Pensez-vous obtenir le succès? (l'erreur de rappel peut être retiré, jsonp demande de ne pas la déclencher.)
processData:false,crossDomain:true,jsonp: false,
processData
n'est pas nécessaire car #1 vous n'êtes pas d'envoyer des données, et #2, ça ne veut rien dire pour un jsonp demande. crossDomain:true
est presque jamais nécessaire, le seul cas où il est si vous voulez faire une requête d'origine tout en le traitant comme un cross-origin demande. Puisque vous faites une croix-requête d'origine, ça va déjà être le cas par défaut. jsonp:false
ne doit jamais être utilisé sans jsonpCallback:"callback"
.non... c'est que j'ai ajouté pour les tests. Cette croix de domaine demande c'est pourquoi j'ai utilisé ces codes 😉
voir mise à jour de commentaire, désolé. Aucune de ces trois options ont aucun sens avec la demande que vous faites.
Si quoi que ce soit, vous devez être faire un SCRO demande, mais qui ne va fonctionner que si le service prend en charge la SCRO et nous ne pouvons pas dire si oui ou non il n'a donné ce qui a été fourni.
Pour commencer, retirez ces trois options et essayez à nouveau la demande. Pensez-vous obtenir le succès? (l'erreur de rappel peut être retiré, jsonp demande de ne pas la déclencher.)
OriginalL'auteur Miqdad Ali | 2013-06-07
Vous devez vous connecter pour publier un commentaire.
Ressemble à l'intérieur struct JSON est transmis le long d'une chaîne de caractères. Vous aurez en JSON.parse() une fois de plus à obtenir que les données d'un objet.
Edit:
Essayez ce qui suit:
success
methode. ALORS, comment puis-je attraper cette ?J'ai essayé tooo. mais que de temps ajax d'erreur de la méthode est de déclenchement et n'obtiens pas de réponse également.
Désolé, l'api est privé et j'ai collé de la réponse de l'api en question lui-même
Si la prolongation de la modifier au-dessus de ne pas le faire alors je suis perplexe.
Il ne sera pas l'atteindre, parce que jQuery tente d'analyser JSON automatiquement et il ne parvient pas à le faire. stackoverflow.com/questions/16989505/jquery-cross-domain-ajax/...
OriginalL'auteur EWit
Malheureusement, il semble que ce service web renvoie du JSON qui contient un autre JSON - analyse de contenu de l'intérieur JSON est un succès. La solution est moche mais qui marche pour moi.
JSON.parse(...)
essaie de convertir la totalité de la chaîne et échoue. En supposant que vous obtenez toujours la réponse de commencer avec{"AuthenticateUserResult":
et intéressant de données est après cela, essayez de:Il est très important que
dataType
doit êtretext
pour empêcher l'auto-analyse de la malformation de JSON que vous recevez à partir du service web.En gros, je suis en essuyant l'extérieur JSON par la suppression de niveau supérieur accolades et les principaux
AuthenticateUserResult
avec d'attaque et de fuite des guillemets. Le résultat est un bien formé JSON, prêt pour l'analyse.Il atteignent la méthode d'erreur? Ce qui est dans responseData, textStatus et errorThrown? En supposant que vous avez défini
dataType
àtext
.oui. atteindre erreur de méthode
Alors, avez-vous essayé d'alerter textStatus, responseData et errorThrown?
Je sais que ce ne sera pas la solution finale, mais nous avons besoin pour avancer. Vous avez dit que cette "imbriqués JSON" est présent dans
responseData
indépendamment de l'erreur. Donc, essayez d'utiliser mon code danserror
méthode au lieu desuccess
. Si vous pouvez céder les données à variableauthResult
(JSON.analyser n'est pas en panne), puis on va juste avoir à déduire detextStatus
eterrorThrown
exactement ce qui va mal.OriginalL'auteur ElmoVanKielmo
La réponse du serveur JSON est un format de Chaîne. Si le type de données que 'json' jquery va tenter de l'utiliser directement. Vous devez définir le type de données "texte" et ensuite d'analyser manuellement.
OriginalL'auteur Subir Kumar Sao
Si vous prévoyez d'utiliser
JSONP
vous pouvez utilisergetJSON
qui fait pour ça. jQuery a des méthodes d'assistance pourJSONP
.Lire les liens ci-dessous
http://api.jquery.com/jQuery.getJSON/
Exemple de base de l'aide .ajax() avec JSONP?
Bases de la croix de domaine jsonp
OriginalL'auteur Techie
Voici l'extrait de mon code.. Si cela résout votre problème..
Code Client :
Ensemble jsonpCallBack : 'photos' et dataType:'jsonp'
Code Côté Serveur (À L'Aide De Reste Facile)
OriginalL'auteur Sanjay Kumar
Vous avez juste à analyser la chaîne à l'aide de JSON.analyser comme ceci :
Ici, vous aurez quelque chose comme ceci :
Et de la demande, n'oubliez pas de mettre
dataType:'jsonp'
et pour ajouter un fichier dans le répertoire racine de votre site appelécrossdomain.xml
et contenant :MODIFIER pour prendre soin de Sanjay Kumar POST
De sorte que vous pouvez définir la fonction de rappel à appeler dans le JSONP à l'aide de
jsonpCallback
!Oui, en fait, vous devrez utiliser un fonction de callback, mais dans votre cas, vous ne pouvez pas parce que vous n'avez pas la main sur l'autre main le site! Je vais rechercher un peu plus...
Lire ce stackoverflow.com/a/22753033/644011
OriginalL'auteur JoDev
Lors de l'utilisation de "jsonp", vous serait essentiellement le retour des données enveloppé dans un appel de fonction, quelque chose comme
Si vous avez accès au serveur, veuillez tout d'abord vérifier que la réponse est dans la bonne
"jsonp"
formatPour une telle réponse provenant du serveur, vous devez spécifier quelque chose dans l'appel ajax ainsi, quelque chose comme
Veuillez noter que le nom de la fonction de rappel n'a pas besoin d'être "
jsonpCallback
" c'est juste un nom choisi comme un exemple, mais il doit correspondre au nom(emballage fait sur le côté serveur.Ma première estimation de votre problème, c'est que la réponse du serveur n'est pas ce qu'elle devrait être.
Si votre réponse est juste {"AuthenticateUserResult":"{\"PKPersonId\":1234,\"Salutation\":null,\"FirstName\":\"Miqdad\",\"LastName\":\"Kumar\",\"Designation\":null,\"Profile\":\"\",\"PhotoPath\":\"\/UploadFiles\/\"}"} et n'est pas enveloppé dans un rappel, Je ne pense pas que vous pouvez utiliser. "jsonp" est juste en tirant parti de la balise de script derrière la scène et sans un "rappel", je ne pense pas que vous pouvez vous procurer de la réponse dans votre code.
J'ai essayé avec la suppression de jsonp. mais que de temps ajax d'erreur de la méthode est de déclenchement et n'obtiens pas de réponse également.
Votre principal problème est que le serveur n'est pas l'envoi de la réponse dans un format qui peut être appelé la croix-domaine (à l'aide de jsonp). Vous ne pouvez pas utiliser json, comme son inter-domaine. À moins que la réponse du serveur a un 'callback' nom associé avec elle, je ne pense pas que vous pouvez utiliser lorsque vous effectuez un cross-domain appel
Il existe 3 façons je pense, qui peut être utilisé pour faire de l'inter-domaine d'appel que vous souhaitez. JSONP,de la SCRO et l'utilisation d'un proxy Dans votre cas, ça ressemble à du “jsonp” ne peut pas être utilisé parce que la réponse n'est pas dans un format “jsonp” prend en charge (avoir la réponse enveloppé dans un rappel)
OriginalL'auteur PJR