javascript - 使用动态脚本加载 JSON 数据 - 跨域 - CORS 不可用

标签 javascript jquery cross-domain access-control servicenow

我正在运行一个 ServiceNow 实例,并且我正在尝试使用 JSON 库提取所有用户。如果我输入转储此数据的 URL,我可以轻松查看 JSON 用户列表,我正在尝试创建一个网页,该网页将获取此 JSON 列表并从中创建用户列表。我不断遇到跨域问题,CORS 不可供我使用,因此我尝试根据用户的信息动态加载脚本。这是我正在尝试运行的代码。

        function test() {
        var username = document.getElementById("username").value;
        var password = document.getElementById("password").value;
        var domain = document.getElementById("domain").value;
        var targeturl = "https://" + username + ":" + password + "@"
            + domain + "/sys_user_list.do?JSON&sysparm_action=getRecords";
        $.getScript(targeturl + "&callback=dumpData")
        function dumpData(data) {
            alert(data);
        }
    }

此时脚本似乎可以正确加载,但会导致语法错误。

未捕获的语法错误:意外的标记:

我应该如何进行 getScript 调用才能获取 JSON 数据?这是否是一个有效的方法,我在试图解决这个问题时偶然发现,这似乎是我唯一的选择。我尝试过 YQL,但不起作用。

编辑:

我重新编写了代码以使用 $.ajax,这是代码

            $.ajax({
            url: 'https://' + username + ':' + password + "@" + domain + '/sys_user_list.do?JSON&sysparm_action=getRecords&callback=test',
            type: "GET",  
            success: function (data) {
                alert("hello");
            },
            crossDomain: true,
            dataType: "jsonp",
            jsonpCallback: 'test'
        });
        function test(data) {
            alert("It worked!");
        }

我已经搜索了所有与此相关的帖子,但仍然无法弄清楚这一点。有人对如何补救这种情况有什么建议吗?它仍然给出无效的语法错误。难道就无法获取这个 JSON 数据吗?

我也尝试过YQL来获取数据,但也遇到了安全问题。

谢谢

克里斯

最佳答案

根据我在卡尔加里使用 JSON Web 服务插件的经验,ServiceNow 不支持 JSONP,仅支持 JSON。

您可能需要构建自定义脚本 Web 服务才能获得正确的格式。我也没有看到 JSONP 出现在都柏林。

链接示例: https://<instance>.service-now.com/<table>.do?JSON&sysparm_action=getRecords&displayvalue=true

displayvalue=true将引用字段的 sys_id 交换为人类友好的替代方案。

要访问数据结构,很简单:

function callMe() {

  $.getJSON('url.json', function(myData) {

    for (n = 0; n < myData.records.length; n++) {
      console.log(myData.records[n].<column1> + '\n' +
                myData.records[n].<column2> + '\n' +
                myData.records[n].<column3> + '\n' +
                myData.records[n].<column4> + '\n\n'
               );
    }
  });
};

您可能最好使用 CMS/jelly 来制作此列表。

关于javascript - 使用动态脚本加载 JSON 数据 - 跨域 - CORS 不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17435661/

相关文章:

javascript - Vaadin 的 AbstractJavascriptComponent 的部分状态更改

javascript - 在 JQuery 中选择具有相同类的特定元素

Javascript:获取 JSON 数组中的所有现有键

javascript - 提交()函数不起作用

javascript - 与服务器通信的 html 小部件

javascript - jquery - 从本地文件系统加载 XML 文件而不会出现跨域错误

javascript - 跨域javascript表单填写、反向代理

javascript - 为什么每次点击都会多次运行此代码?

javascript - 从 Javascript 数组中删除项目并显示新数组

javascript - 如何在单击下拉列表外部时关闭下拉列表,但在选择文本区域时阻止其关闭?