Ajax 'Origine localhost n'est pas autorisé par Access-Control-Allow-Origin'
Je suis relativement nouveau à l'Ajax et c'était seulement chargé de cette inter-domaine d'appel. Nous avons une zone de texte sur notre page web que l'utilisateur va utiliser pour exécuter une recherche de noms de société. En cliquant sur un bouton à côté de la zone de texte de l'appel Ajax sera demandé. Malheureusement, le service web est situé dans un autre domaine, c'est donc naturellement à l'origine de problèmes.
Ci-dessous est ma meilleure tentative à l'élaboration de ce travail. Je tiens également à noter, le but de cet appel est de retourner les résultats dans un format XML, qui sera analysé dans la success
partie de la demande.
Voici le message d'erreur:
Origin http://localhost:55152 is not allowed by Access-Control-Allow-Origin.
Je suis à une perte quant à ce qu'il faut faire pour contourner ce problème, toutes les idées seraient grandement appréciés.
function GetProgramDetails() {
var URL = "http://quahildy01/xRMDRMA02/xrmservices/2011/OrganizationData.svc/AccountSet?$select=AccountId,Name,neu_UniqueId&$filter=startswith(Name,\'" + $('.searchbox').val() + "\')";
var request = $.ajax({
type: 'POST',
url: URL,
contentType: "application/x-www-form-urlencoded",
crossDomain: true,
dataType: XMLHttpRequest,
success: function (data) {
console.log(data);
alert(data);
},
error: function (data) {
console.log(data);
alert("Unable to process your resquest at this time.");
}
});
}
Pourriez-vous fournir un exemple de la façon de le faire?
Ok. C'est le code c#.Essayez De Réponse.AppendHeader("Access-Control-Allow-Origin", Demande.Les en-têtes["Origine"]); ou de la Réponse.AppendHeader("Access-Control-Allow-Origin", "*");
Désolé, encore un peu perdu - où cela ne va? dans l'appel Ajax? Je suis en utilisant le langage C# est parfait.
Votre appel ajax est bien.. Dans votre méthode de Serveur (url), vous devez définir l'en-tête de réponse pour "Access-Control-Allow-Origin", soit pour correspondre à la demande de l'Origine ou de définir un caractère générique*. générique probablement pas travailler si vous êtes en utilisant votre appel ajax avec withCredentials=true. Mais ici, vous ne semblez pas comme cela. DONC, essayez l'une des options qu'il devrait fonctionner correctement.
OriginalL'auteur NealR | 2013-03-20
Vous devez vous connecter pour publier un commentaire.
Cette erreur est due à la restriction appliquée en inter-domaine du partage des ressources. Cela a été mis en œuvre comme une partie de la fonctionnalité de sécurité pour restreindre les clients(domaine) de ressources via la croix domaine des appels. Lorsque vous envoyez une demande à la webservice ou de l'api ou similaire, il ajoute un en-tête d'Origine dans la demande de serveur ou de destination (ici votre api) afin de valider si la demande provient d'une source autorisée ou non. Idéalement, l'api/server doit rechercher la
Origin
dans leRequest header
qu'il a reçues et probablement valide par rapport à l'ensemble d'origines(domaines), à qui il est autorisé à servir de ressources pour. Si elle provient d'un domaine autorisé, il va ajouter le même domaine dans l'entête de la réponse que"Access-Control-Allow-Origin"
valeur. générique est également autorisée pour cela, mais le problème est qu'avec la wild card de la permission de quelqu'un peut faire une demande et obtenir servi (avec quelques restrictions, comme une api est authentifié à l'aide de l'authentification windows ou des cookies lorsque vous avez besoin d'envoyer lewithCredentials
valeur*
n'est pas autorisé). ce n'est pas une bonne pratique d'utiliser le caractère générique de l'origine de l'en-tête de réponse qui en fait ouvert à tout le monde.Voici certaines façons de définir l'en-tête de réponse avec les valeurs:-
vous pouvez même ajouter plusieurs Access-Control-Allow-Origin-têtes dans la même réponse (je crois fonctionne dans la plupart des navigateurs)
Sur le côté serveur (la syntaxe c#) vous voulez faire cela:-
Espérons que cette aide!!!
["Origin"]
serait le même quehttp://yourdomain.com
? (Dans mon cas, ce seraithttp://localhost:55152
)Oui. Vous pouvez le confirmer dans votre code serveur en débogage Demande.Les en-têtes["Origine"] ou à l'aide de fiddler la recherche de l'en-tête de votre demande..
Qui fichier pour écrire cela? Ou où écrire ce n'est pas mentionné.
D'autres personnes peuvent confirmer lorsqu'il est ajouté? En essayant de résoudre ce problème dans mon ASP.NET projet pour que je puisse appeler un WebService méthodes à partir d'un client.
OriginalL'auteur PSL