问题 如何从javascript调用REST API


我有一个提供json数据的网址...

我想从javascript中点击该URL但我收到此错误:

未声明纯文本文档的字符编码。如果文档包含US-ASCII范围之外的字符,则文档将在某些浏览器配置中使用乱码文本进行渲染。需要在传输协议中声明文件的字符编码,或者文件需要使用字节顺序标记作为编码签名

代码:

function a(){
$.getJSON(url,function(data) { alert(data);});
}

完整代码:

<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" ></meta>
<script language="JavaScript" type="text/javascript" src="jquery-1.7.1.min.js"></script>
<script>

function a(){
$.getJSON(url,function(data) { alert(data);});
}
</script>
</head>
<body>
<input type="text"/>
<input type="submit" value="search" onclick="a()"/>
</body>
</html>

6266
2018-01-21 06:13


起源

错误出现在哪里? - Quentin
在这个js:jquery-1.7.1.min.js中 - Rishi
这是解释您的请求的文档设置的字符编码的问题。谁控制服务器端代码? - Brian Vanderbusch
您想通过AJAX加载哪个URL?
@Brian Vanderbusch。 Heroku的 - Rishi


答案:


你的代码似乎是对的。

你在做吗? fully qualified URL call

如果您要进行完全限定的URL呼叫,请确保以下内容。

  1. 您正在调用相同的域(相同的服务器)。你不能做一个 对另一个域的简单JSON调用。
  2. 如果要使用跨域调用,则必须使用JSONp

更新: 这不起作用,因为它是跨域调用。

解决这个问题

JavaScript的

创建一个功能

function getMyData(data) {
    alert(data);
    //Do the magic with your data
}

服务器端

在服务器端将数据包装在函数语法中

getMyData("Enter your data here");

JavaScript的

然后创建一个脚本标记并添加一个指向跨域页面的链接

 <script type="text/javascript"
         src="cross ref url">
 </script>

以供参考: 维基百科

编辑:另一个选项是在您的域上创建代理。即在您的域中创建一个页面,该页面在内部调用跨域页面并将相同的数据返回给您的Ajax调用。


10
2018-01-21 06:34



你的意思是我必须使用url作为var url = url +“?callback =?”我用过..我没有找到任何结果.... - Rishi
不,你能发布“url”的全部内容吗? - Wolf
URL =”scalajobz.com/getAllJobs?callback=?”; - Rishi
只需使用url ='getAllJobs'并尝试 - Wolf
你是从同一个域(即scalajobz.com本身的一个页面)调用它吗? - Wolf