Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 可以通过浏览器访问远程json组件,但不能通过$.getJSON()以编程方式访问_Javascript_Json_Rest_Jenkins_Jsonp - Fatal编程技术网

Javascript 可以通过浏览器访问远程json组件,但不能通过$.getJSON()以编程方式访问

Javascript 可以通过浏览器访问远程json组件,但不能通过$.getJSON()以编程方式访问,javascript,json,rest,jenkins,jsonp,Javascript,Json,Rest,Jenkins,Jsonp,我已经挣扎了三天试图解决这个问题,谷歌超载了,希望能得到一些帮助 我们在http://jenkinsBuild.mycompany.com:8080因此,如果我在浏览器中输入此url http://jenkinsBuild.mycompany.com:8080/view/my_view/job/build_me/123/api/json?tree=result 。。。浏览器页面返回显示 {“结果”:“成功”} 现在,根据“Jenkins为其功能提供机器可消费的远程访问API”,通过REST AP

我已经挣扎了三天试图解决这个问题,谷歌超载了,希望能得到一些帮助

我们在
http://jenkinsBuild.mycompany.com:8080
因此,如果我在浏览器中输入此url

http://jenkinsBuild.mycompany.com:8080/view/my_view/job/build_me/123/api/json?tree=result

。。。浏览器页面返回显示

{“结果”:“成功”}

现在,根据“Jenkins为其功能提供机器可消费的远程访问API”,通过REST API支持json和jsonp,我认为这应该避免任何同源策略问题

我正在尝试(使用最新的Chrome浏览器)获取相同的json组件
{“result”:“SUCCESS”}

我正在使用HTML/javascript进行
$.getJSON()
调用,如下所述。HTML文件目前驻留在我的本地计算机上,但最终可能会驻留在wiki上。代码后面列出了三个URL的控制台输出

如何通过直接在浏览器中输入url获得相同的json结果?谢谢你的帮助

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){
    var url1 = "http://jenkinsBuild.mycompany.com:8080/view/my_view/job/build_me/123/api/json?tree=result";
    var url2 = "http://jenkinsBuild.mycompany.com:8080/view/my_view/job/build_me/123/api/json?tree=result&callback=?";
    var url3 = "http://jenkinsBuild.mycompany.com:8080/view/my_view/job/build_me/123/api/json?callback=?&tree=result";

    $('button').click(function(){
        $.getJSON(url1, function(json) {
            $("#reply").append("got callback: " + json);    
        });
    });
});
</script>

</head>
<body>

<button>Get Jenkins</button><br />

<div id="reply">

</div>

</body></html>

$(文档).ready(函数(){
变量url1=”http://jenkinsBuild.mycompany.com:8080/view/my_view/job/build_me/123/api/json?tree=result";
变量url2=”http://jenkinsBuild.mycompany.com:8080/view/my_view/job/build_me/123/api/json?tree=result&callback=?";
变量url3=”http://jenkinsBuild.mycompany.com:8080/view/my_view/job/build_me/123/api/json?callback=?&tree=result";
$(“按钮”)。单击(函数(){
$.getJSON(url1,函数(json){
$(“#reply”).append(“got callback:”+json);
});
});
});
找到詹金斯
三个URL的控制台输出

url1->XMLHttpRequest无法加载。访问控制允许原点不允许原点为空。

url2->Uncaught语法错误:意外标记:json:1

url3->未捕获语法错误:意外标记:json:1


更新:

Url1不是有效的jsonp调用,因为它没有指定回调。不确定为什么url2和url3失败

以下是手动指定回调函数名称的另一种方法:

var url2 = "http://jenkinsBuild.mycompany.com:8080/view/my_view/job/build_me/123/api/json?tree=result&callback=my_local_javascript_function";
其中my_local_javascript_函数是调用浏览器上javascript代码中的函数。将发生的情况是,服务器将使用如下所示的脚本进行响应:

my_local_javascript_function({ //json object in here });

该功能需要在本地浏览器上可用,然后才能运行。有关JSONP的更多信息,请参见此处:

ajax调用遵循,因此两个文档需要位于同一个域中,而不是您的情况,因为调用的页面位于您的本地计算机上。

您可能有相同的源问题。如果访问页面的URL与Jenkins服务器具有不同的域或端口号,浏览器将不允许。可能重复感谢您的评论和回答,但我非常确定这是可能的,因为Jenkins REST API允许JSONP绕过相同的源策略。关于如何在脚本中指定回调函数以及调用$.getJSON的URL,有一个详细的第二个答案(下面有注释)——有人删除了吗?我想保留在这里,因为它暗示了与上面可能重复的链接不同的东西-谢谢。我根据用户2736012的评论更正了我的答案并取消删除。您需要使用开发人员控制台查看请求/响应,并查看响应的内容。因为发出JSONP请求时会出现语法错误,所以发送的响应很可能没有正确格式化为JSONP。为什么问号会使其失败?似乎OP更可能返回JSON格式,而不是JSONP格式。问号表示查询字符串的开始。他现在有两个问号?tree=result&callback=?'不起作用。它会起作用,而且肯定不会导致语法错误。无论如何,jQuery使用它作为JSONP的指示器,并用函数名替换
。@user2736012-您是正确的。我已经更新了我的答案,删除了不正确的建议,只是提供了一种手动命名回调的替代方法。谢谢你的建议@manishie-我已经给了你尝试的机会,尽管它没有解决问题-我怀疑Jenkins不再做jsonp了?这很烦人,我可以通过在浏览器中输入几十个url并手动分割返回的json信息来获取有关Jenkins构建的所有信息,以说明哪些构建已经运行/通过/失败等,但我不能用javascript编程实现这一点。一个有趣的运动,但浪费了一个漫长的周末!谢谢你的帮助。