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);
        }
    }   
}
25
demandé sur alex9311 2014-04-01 12:23:28

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.

59
répondu Paul Draper 2014-06-25 09:03:34

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);
});
0
répondu Mat Weaver 2018-02-21 21:59:34

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.

-4
répondu limengjun 2014-04-01 08:32:36