【问题标题】:NetSuite Restlet Using jQuery使用 jQuery 的 NetSuite Restlet
【发布时间】:2020-09-12 06:33:04
【问题描述】:

我正在尝试使用 jQuery 访问 NetSuite restlet。这是我的代码:

jQuery.ajax({
    url: "https://rest.na2.netsuite.com/app/site/hosting/restlet.nl?script=270&deploy=1&searchId=customsearch_active_models",
    type: "GET",
    dataType: "json",
    contentType: "application/json",
    beforeSend: function (xhr) {
        xhr.setRequestHeader("Authorization", "NLAuth nlauth_account=ACCOUNT#, nlauth_email=EMAIL, nlauth_signature=XXXXXX, nlauth_role=ROLE#")
    }
})
.done(function(data){
    console.log(data);
});

当我在 Chrome/FF 中检查“网络”标签时,它给了我以下 401 响应:

XMLHttpRequest cannot load https://rest.na2.netsuite.com/app/site/hosting/restlet.nl?script=270&deploy=1&searchId=customsearch_active_models. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://www.tracksandtires.com' is therefore not allowed access. The response had HTTP status code 401.

我没有正确格式化授权部分吗?我找不到任何关于通过 jQuery 访问 NetSuite Restlet 的文档,所以我在这里有点盲目。我应该只使用 vanilla javascript 而不是 jQuery 吗?任何帮助将不胜感激!

【问题讨论】:

    标签: javascript jquery netsuite


    【解决方案1】:

    尝试像这样使用 jsonp:

    jQuery.ajax({
        url: "https://rest.na2.netsuite.com/app/site/hosting/restlet.nl?script=270&deploy=1&searchId=customsearch_active_models",
        type: "GET",
        crossDomain: true,
        dataType: "jsonp",
        contentType: "application/json",
        beforeSend: function (xhr) {
            xhr.setRequestHeader("Authorization", "NLAuth nlauth_account=ACCOUNT#, nlauth_email=EMAIL, nlauth_signature=XXXXXX, nlauth_role=ROLE#")
        }
    })
    .done(function(data){
        console.log(data);
    });
    

    更多信息: How does Access-Control-Allow-Origin header work?

    【讨论】:

    • 这是正确的,这就是我将其标记为这样的原因,但我选择 cURL 是因为@bknights 在下面的答案中提出了安全风险。
    • 是的,@bknights 很好。我非常关心你是否可以,我没有停下来思考你是否应该。
    【解决方案2】:

    基本不会

    尽管@adolfo-garza 的回答确实正确显示了 JSONP,但使用 Restlet 并没有获得任何收益,并且您放弃了永远无法用于敏感内容的登录。基本上,您已经将您的 Netsuite 凭据之一放到了公共互联网上。这不会有什么好处。

    这是 Suitelet 的用例之一。您创建一个具有公共访问权限的 Suitelet(无需登录即可使用;受众所有角色),然后您不需要身份验证(尽管如果您需要按客户过滤信息,有一些方法可以依赖购物会话或结帐会话身份验证)。

    如果您只是想测试一个真正的 Restlet 用例,那么您应该使用 Node 或一些非基于浏览器的应用程序来执行此操作。

    【讨论】:

    • 所以基本上使用 cURL 之类的东西来获取我们的数据,然后在我们的站点中利用我们从 NetSuite 检索到的内容。对吗?
    • 谢谢。我将为此使用 cURL。
    • 您的意思是 PHP 中的 cURL 从 RestLet 获取数据并将其显示为服务器端渲染?还是使用 curl 从命令行测试 RestLet?
    • 我的意思是在 PHP 脚本中使用 cURL 来获取我们的数据。
    猜你喜欢
    • 1970-01-01
    • 2018-12-21
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    • 2018-01-08
    • 2016-11-16
    相关资源
    最近更新 更多