【问题标题】:Cross Domain access to USPS API跨域访问 USPS API
【发布时间】:2017-11-14 12:12:55
【问题描述】:

我正在尝试使用 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();
    }
});

【问题讨论】:

  • 你需要一个网络服务器。
  • 哦,谢谢,你能指出我能弄清楚这意味着什么的地方吗? @slaks
  • 他们的服务器发送Access-Control-Allow-Origin: *;你实际上不应该有问题。你得到什么错误?
  • Content-Type 对 GET 请求毫无意义。

标签: javascript jquery xmlhttprequest


【解决方案1】:

大家好。

请多多包涵,我犯了一个严重的初学者错误,并弄清楚 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();
    }
});

这是它下面的代码,在我取出设置的标头类型后给了我错误(这解决了我的 CORS 问题,因为 api 上不允许 POST 请求)

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

    addTableRowsFromXmlDoc(rowData,outputResult);
};

});

【讨论】:

    猜你喜欢
    • 2016-01-26
    • 2014-09-28
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多