JavaScript XMLHttpRequest en utilisant JsonP
je veux envoyer les paramètres de la requête vers un autre domaine
je sais déjà que les scripts Croisés ont besoin de JsonP et j'ai utilisé JsonP avec jQuery ajax
mais je ne comprends pas comment faire des scripts Croisés en utilisant XMLHttpRequest
code suivant mon code XMLHttpRequest de base.
je suppose que je dois chanter xhr.setRequestHeader()
et je dois ajouter le code de parsing
s'il vous plaît me donner des idea
var xhr;
function createXMLHttpRequest(){
if(window.AtiveXObject){
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}else{
xhr = new XMLHttpRequest();
}
var url = "http://www.helloword.com";
}
function openRequest(){
createXMLHttpRequest();
xhr.onreadystatechange = getdata;
xhr.open("POST",url,true);
xhr.setRequestHeader("Content-Type",'application/x-www-form-urlencoded');
xhr.send(data);
}
function getdata(){
if(xhr.readyState==4){
if(xhr.status==200){
var txt = xhr.responseText;
alert(txt);
}
}
}
3 réponses
JSONP n'utilise pas XMLHttpRequests.
la raison pour laquelle JSONP est utilisé est de surmonter les restrictions d'origine croisée de XHRs.
à la place, les données sont récupérées via un script.
function jsonp(url, callback) {
var callbackName = 'jsonp_callback_' + Math.round(100000 * Math.random());
window[callbackName] = function(data) {
delete window[callbackName];
document.body.removeChild(script);
callback(data);
};
var script = document.createElement('script');
script.src = url + (url.indexOf('?') >= 0 ? '&' : '?') + 'callback=' + callbackName;
document.body.appendChild(script);
}
jsonp('http://www.helloword.com', function(data) {
alert(data);
});
par souci de simplicité, cela ne comprend pas le traitement des erreurs si la requête échoue. Utilisez script.onerror
si vous en avez besoin.
je sais que vous avez déjà obtenu la réponse pour mais si quelqu'un d'autre ici voulait un exemple d'un en utilisant des promesses voici un.
function jsonp(url) {
return new Promise(function(resolve, reject) {
let script = document.createElement('script')
const name = "_jsonp_" + Math.round(100000 * Math.random());
//url formatting
if (url.match(/\?/)) url += "&callback="+name
else url += "?callback="+name
script.src = url;
window[name] = function(data) {
resolve(data);
document.body.removeChild(script);
delete window[name];
}
document.body.appendChild(script);
});
}
var data = jsonp("https://www.google.com");
data.then((res) => {
console.log(res);
});
vous ne pouvez pas faire de scripts Croisés en utilisant XMLHttpRequest.Si vous voulez traverser domaine avec Jquery, vous devez créer un nouveau script de nœud et de définir l'attribut src.