XMLHttpRequest ne peut pas charger une URL avec jQuery
Je vais essayer d'obtenir certaines données json à partir d'une "distance" du site web.
Je lance mon service web sur le 99000 port, puis, j'ai lancer mon site sur le 99001 port (http://localhost:99001/index.html).
Je reçois le message suivant:
XMLHttpRequest cannot load http://localhost:99000/Services.svc/ReturnPersons. Origin http://localhost:99001 is not allowed by Access-Control-Allow-Origin.
Même Si je lance ma page web dans un fichier HTML, j'obtiens ceci:
XMLHttpRequest cannot load http://localhost:99000/Services.svc/ReturnPersons.Origin null is not allowed by Access-Control-Allow-Origin.
Le service web renvoie des données. J'essaie de capter les éléments de données comme ceci:
var url = "http://localhost:99000/Services.svc/ReturnPersons";
$.getJSON(url, function (data) {
success: readData(data)
});
function readData(data) {
alert(data[0].FirstName);
}
Et je vais essayer d'obtenir cette structure:
[{"FirstName":"Foo","LastName":"Bar"},{"Hello":"Foo","LastName":"World"}]
Savez-vous pourquoi j'obtiens cette erreur?
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas faire un XMLHttpRequest crossdomain, la seule "option" serait une technique appelée JSONP, ce qui revient à ceci:
De démarrage: Ajouter un nouveau
<script>
de la balise avec l'url distante, puis assurez-vous que l'url distante retourne valide d'un fichier javascript qui appelle la fonction de rappel. Certains services de soutien (et laissez-vous le nom de votre rappel dans un des paramètres).L'autre voie facile, serait de créer un "proxy" sur votre serveur local, qui reçoit la demande à distance et puis tout simplement "en avant" sur votre javascript.
edit/ajout:
Je vois jQuery a un support intégré pour JSONP, en vérifiant si l'URL contient "callback=?" (où jQuery va le remplacer ? avec la méthode de rappel). Mais vous auriez encore besoin de processus que sur le serveur distant pour générer une réponse valide.
{"foo": "bar"}
vous devez envelopper la chaîne json dans un rappel de la méthode (fonction javascript) qui gère la réponse json. par exemple,myFunction({"foo": "bar"});
Dans de nouveaux jQuery 1.5 vous pouvez utiliser:
Jouer avec 3 solutions de travail dans l'action.
Donnée externe JSON:
Solution 1: $.ajax() + jsonp:
Solution 2: $.ajax()+json+&calback=?:
Solution 3: $.getJSON()+calback=?:
Documentations: http://api.jquery.com/jQuery.ajax/ , http://api.jquery.com/jQuery.getJSON/
Trouvé une solution de contournement possible que je ne crois pas, a été évoqué.
Ici est une bonne description du problème:
http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api
Fondamentalement, aussi longtemps que vous utilisez des formulaires/url-encodé/texte les types de contenu vous sont beaux.
- Je l'utiliser avec ASP.NET WebAPI2. Donc, à l'autre extrémité:
De cette façon, Json formateur obtient utilisés lors de l'analyse de texte simple type de contenu.
Et n'oubliez pas dans le Web.config:
Espère que cette aide.
Je suis en utilisant WebAPI 3 et a été confronté au même problème. Le problème a résoudre @Rytis ajouté sa solution. Et je pense que dans WebAPI 3, nous n'avons pas besoin de définir la méthode de
RegisterWebApi
.Mon changement était seulement dans le web.fichier de configuration et de travail.
Merci pour vous la solution de @Rytis!