跨域访问USPS API

时间:2017-11-14 02:51:26

标签: javascript jquery xmlhttprequest

我正在尝试使用jquery向USPS网站发出CORS请求,我已经让它在我的工作电脑上工作,因为某些原因使用Internet Explorer。我在新版本的IE以及Firefox和Chrome上收到了CORS错误。

在一个问题中,由于没有代表我不能发表评论,他们建议先将其发送到服务器,然后再发出请求而不是浏览器,有人可以向我解释一下吗?我如何使用javascript托管服务器,我只需要使用这个API来获取跟踪信息,每次我尝试做这样的事情时,这个愚蠢的CORS限制是我的后方的痛苦。

请帮忙。

  function sendTrackingRequest(x) {
        var requestURL = "http://production.shippingapis.com/ShippingAPI.dll?API=TrackV2&XML="
        var request = new XMLHttpRequest();
        request.open( "GET", requestURL + trackNumberToBeTracked, true);
        // various sanitizations should be employed on the backend when dealing with user input
        request.responseType = "text/xml";
        request.setRequestHeader( "Content-Type", "xml" );
        request.addEventListener( "readystatechange", function() {
            if ( request.readyState == 4 ) {
                if ( request.status == 200 ) {
                    // process response
                    var trackingStatus = request.response
                    showResult(trackingStatus);
                    console.log(trackNumberToBeTracked);
                } else {
                    alert("error")
                }
            }
        }, false );
        request.send();
    }
});

1 个答案:

答案 0 :(得分:0)

好的每个人。

请耐心等待我,我犯了一个巨大的初学者错误,并弄清楚Slakes的帮助有什么问题。

所以在我的代码中,我有一个类似名称的函数,它是一个未定义的.response。我听了第一个帮助者后发现了这个错误,他说一个内容类型对于Get请求并不是必要的,他在进一步的研究之后就是这样。

在我删除了我正在测试的所有不良功能之后,我终于得到了我的回应。这是我的代码

$(document).ready(function() {
$('#trackButton').click(function() {
    var enteredNumber = $('#trackingNumbers').value;
    var trackNumberToBeTracked = '<TrackRequest USERID="648FOOTL0638">    <TrackID ID="9405510200839104436417"></TrackID></TrackRequest>'
    sendTrackingRequest();

    function sendTrackingRequest(x) {
        var requestURL = "http://production.shippingapis.com/ShippingAPI.dll?API=TrackV2&XML="
        var request = new XMLHttpRequest();
        request.open( "GET", requestURL + trackNumberToBeTracked, true);
        // various sanitizations should be employed on the backend when dealing with user input
        request.addEventListener( "readystatechange", function() {
            if ( request.readyState == 4 ) {
                if ( request.status == 200 ) {
                    // process response
                    var trackingStatus = request.response
                    alert(trackingStatus);
                    console.log(trackNumberToBeTracked);
                } else {
                    alert("error")
                }
            }
        }, false );
        request.send();
    }
});

这是下面的代码,在我拿出set header类型(由于api上不允许POST请求解决了我的CORS问题)后给出了错误

function showResult(request) {
    var xmlDoc = request.response.documentElement;
    removeWhitespace(xmlDoc);
    var outputResult = $("#BodyRows");
    var rowData = xmlDoc.$("#Employee");

    addTableRowsFromXmlDoc(rowData,outputResult);
};

});