Cross domain upload de fichier avec jQuery
Mon code fonctionne bien pour les même domaine.
Mais quand je l'ai essayer sur la croix de domaine avec dataType: 'jsonp' & crossDomain: vrai
Exemple de Code -
var fa = new FormData();
fa.append("upload_pass", document.getElementById("upload_pass").files['0']);
$.ajax({
url: 'http://xxx.xx.xx.xx/upload.php',
data: fa,
contentType: false,
processData: false,
dataType: 'jsonp',
crossDomain: true,
type: 'GET',
success: function(data) {
alert(data);
}
});
Est-il une compréhension conceptuelle de l'écart ou de codage problème.
S'il vous plaît suggérer.
- Vous ne pouvez pas télécharger le fichier avec JSONP (GET) simple demande. Vous avez besoin de POST. Pour la croix de domaine en œuvre de la SCRO sur le serveur de réception.
- JSONP fonctionne pas avec la POSTE.
crossDomain: true
juste désactive des en-têtes supplémentaires, comme si vous faisiez une croix de domaine demande. C'est là que vous pouvez faire une demande pour la même origine et puis redirection HTTP vers une origine différente, sans faire une demande complexe. Vous devriez presque jamais besoin de l'utiliser.
Vous devez vous connecter pour publier un commentaire.
Pas moyen de télécharger le fichier via GET. Même si vous utilisez JSONP.
JSONP est de travailler seulement avec les requêtes GET. Et vous ne pouvez pas télécharger des fichiers avec de la requête GET (généralement de téléchargement de fichiers avec les requêtes POST).
Si vous voulez envoyer des croix domaine de la requête POST vers un serveur, alors vous devez être sûr dans le cas suivant:
Que le serveur doit vous envoyer un en-tête
Access-Control-Allow-Origin : *
. Aussi, vous aurez peut-être besoinAccess-Control-Allow-Methods: POST
en-tête.Si il a ces en-têtes, alors vous êtes chanceux et vous pouvez POSTER vos données sur ce serveur.
P. S. Vous pouvez essayer d'utiliser d'autres méthodes pour faire des croix domaine demande. Nice bibliothèque js easyXDM pour la croix de domaine de demandes de, de la sorcière utilise différentes façons de le faire.
JSONP et CORS sont deux choses différentes au total.
JSONP
JSON avec Rembourrage est simplement un hack profitant du fait qu'il n'y a pas la même origine, la politique de restriction lors du téléchargement des fichiers javascript. Comme vous pouvez le télécharger uniquement les scripts, nous utilisons des données intégrées dans le format JSON au lieu de XML ou HTML. Aussi, vous pouvez faire OBTENEZ seulement les demandes avec JSONP, car il n'est de créer un
script
avecsrc
ensemble à un autre domaine et l'ajouter à votre DOM, une fois qu'il est téléchargé, il est exécuté et c'est lors de notre rappel est utilisé pour appeler un code de domaine d'origine en passant objet JSON.De la SCRO
Cross-origin resource sharing est un standard du W3C qui permet à de nombreuses ressources (par exemple, les polices, JavaScript, etc.) sur une page web demandée à partir d'un autre domaine. Vous n'êtes pas limité à seulement OBTENIR, vous pouvez utiliser toutes les méthodes HTTP comme POST, HEAD, PUT , DELETE et d'autres
Comment pouvez-vous faire un SCRO demande :
C'est aussi simple que de changer l'url de votre appel AJAX à un autre domaine, que s'agit-il pas d'autres changements du côté client.
Si votre navigateur prend en charge la SCRO, puis en fonction du type de demande (simple/complexe), un pré-vol des OPTIONS de demande peut être déclenché pour obtenir des informations sur ce type de méthodes & types de contenu sont autorisés pour ce domaine et présente les OPTIONS de réponse sera mis en cache.
À l'avenir, chaque fois que vous effectuez un appel AJAX à un autre domaine, Derrière les coulisses, le navigateur envoie une
Origin
- tête de la demande. Par exemple, si une page de google fait un appel AJAX pour facebook, quelque chose comme ceci est ajoutée afin d'obtenir les en-têtes deQuand facebook voit cet en-tête, il va vérifier si google.com est dans leur liste des hôtes autorisés et est d'accord pour envoyer les en-têtes suivants en réponse.
Noter que le nom d'hôte dans Origine et Allow-Origin les en-têtes doivent correspondre pour que le navigateur d'accepter et d'agir sur la réponse reçue. Vous pouvez même restreindre les méthodes & en-têtes personnalisés autorisé par la mise les en-têtes suivants en réponse
Enfin pour répondre à votre question, changer votre Ajax définition comme ci-dessous
Que vous êtes en train de faire un simple POSTE téléphonique avec fichier, sa simple demande, afin de Permettre-en-tête d'Origine suffit. Dans votre PHP, lire la
Origin
en-tête de vérifier si c'est dans votre liste et définir la même valeur d'en-tête dans Allow-Origin-tête de réponse. Je ne suis pas au courant de PHP mais espérons que quelque chose de ce genre 🙂Plus de ressources sur
Espère que cela répond à votre question 🙂
Vous ne pouvez pas faire n'importe quel type de demande à l'aide du JSONP autre que de se. Vous ne pouvez pas télécharger un fichier à l'aide d'une requête GET (sauf si c'est un très petit fichier de données que vous pouvez lire avec le JavaScript et le convertir en une chaîne de caractères qui peuvent être traités comme des données de formulaire).
Vous avez besoin pour passer à l'aide de POST avec de la SCRO (ou un proxy sur la même origine) pour désactiver la même origine.
De croix domaine de travail vous avez besoin de ces choses -
1 :- Vous besoin de l'autorisation de serveur. Comme Access-Control-Allow-Origin : *.
2 :- Si vous utilisez jquery, vous pouvez utiliser jsonp méthode.
3 - Si l'on veut travailler avec du javascript alors vous pouvez utiliser ce lien -
Comment faire un JSONP demande de Javascript sans JQuery?
Comme les gens l'ont dit - GET n'est pas la façon de le faire. J'ai vu ce genre de chose fait via une iFrame masqué. Vous pouvez probablement trouver divers plugins jQuery pour obtenir le résultat souhaité, mais il en est un que j'ai trouvé appelée "jQuery iFrame Transport"
https://cmlenz.github.io/jquery-iframe-transport/
J'espère que ça va vous aider.
Vous ne pouvez pas télécharger le fichier à l'aide de JSONP ou à l'aide de la requête GET. Êtes-vous sûr qu'il travaillait pour la même origine plus tôt?
Vous devez envoyer un cross-domain XHR demande à télécharger le fichier. Vous pouvez utiliser JQuery File upload pour cela.
https://github.com/blueimp/jQuery-File-Upload/wiki/Cross-domain-uploads