6
votes

Backbone.js ne fera pas des demandes inter-hôtes?

Je joue avec une colonne vertébrale dans ma console chromée et que je rencontre un problème de cross-domain que je ne peux pas comprendre.

L'hôte que je me connecte à vraisemblablement implémente correctement Cors, car une demande de demande XHR brute Le JSON attendu: xxx

(journal 3 xHR Événements de progression sur la console avec les données correctes dans la réponse)

mais quand je fais ce qui suit BACKBONE Le navigateur ne l'aime pas: xxx

(renvoie xmlhttprequest ne peut pas charger http://example.com:3000/entitis/item/. origine http: // localhost: 8000 n'est pas autorisé par l'accès à la commande d'accès. )

Y a-t-il quelque chose que je dois faire pour dire à la colonne vertébrale de travailler avec Cors? Cette erreur semble être venue avant que le navigateur ait même fait une demande, donc je ne pense pas que ce soit une erreur de configuration du serveur.


4 commentaires

Vous pouvez désactiver la même stratégie d'origine dans Chrome, ici expliqua comment le désactiver sur Chrome.


Merci pour la pointe, mais je ne veux pas le désactiver (ceci est conçu pour fonctionner sur des navigateurs Web réguliers).


Ensuite, peut-être Ceci aide.


Oui, comme je l'ai dit dans la question, les Cors fonctionnent bien sur le côté du serveur, car le navigateur est capable de faire des demandes avec une standard XMLHTTPQUEST.


3 Réponses :


8
votes

J'espère que l'une d'entre elles aide (je n'ai pas encore essayé):
1. NOREFORRER" SYNC RESTAURANT DE LA SYNC POUR APPORTER UNE CROISSION D'ORIGINE

$.ajaxPrefilter(function(options, originalOptions, jqXHR) {
    options.crossDomain ={
        crossDomain: true
    };
    options.xhrFields = {
        withCredentials: true
    };
});


2 commentaires

xhrfields.withpredentials s'écrasera dans Firefox si vous faites des appels AJAX synchrones, par exemple charger un modèle avant de rendu. Heureusement, mes modèles sont sur le même domaine pour que je puisse simplement envelopper ce qui précède dans si (originaloption.async! == faux) bloc


Où dois-je ajouter la mise à jour de la méthode de synchronisation? Dans Backbone.js ou mon script?



0
votes

Il s'avère les URL que je demandais avec une colonne vertébrale était légèrement différente de celle demandée via le XHR (ils manquaient un queryarg). Cela a causé le serveur à 500, qui n'a pas les en-têtes Cors. Chrome n'a montré à la requête HTTP du tout dans l'onglet Réseau du panneau de débogage, alors j'étais extrêmement confus.

Fixation du 500 sur le serveur a rendu ce travail à nouveau.


0 commentaires

6
votes

Hey, vous pouvez utiliser quelque chose comme: xxx

La touche est que nous devons utiliser 'JSONP'


0 commentaires