我有一小段代码,我在Firefox Scratchpad中测试了一个包含所有当前可用的Ubuntu Click应用程序的json文件:
function getHttp(url, callback) {
req = new XMLHttpRequest();
req.onreadystatechange = function() {
if (req.readyState === XMLHttpRequest.DONE) {
callback(req.responseText);
}
};
req.open("GET", url, true);
req.send();
}
getHttp("http://search.apps.ubuntu.com/api/v1/search?q=", function(response) {
console.log(response);
});
直接从暂存器运行时,它正确地获取所需的json。然而,当我把它放在一个小html应用程序的javascript文件中时,我正在写它只返回一个空字符串响应 (页面托管在xampp安装上)
我已经在CORS的主题上挖了很多但是它似乎没有帮助我,因为必须在服务器上设置“Access-Control-Allow-Origin:”属性,对吗?
我还尝试将'withCredentials'标志设置为true ...但它不会改变任何内容。
那么为什么它使用暂存器而不是我从http://localhost/project/index.html
访问它?
这是我得到的响应标题:
"Date: Wed, 29 Jan 2014 12:04:52 GMT
Server: gunicorn/0.15.0
Content-Type: application/json
Expires: Wed, 29 Jan 2014 12:05:52 GMT
X-Bzr-Revision-Number: 68
Cache-Control: max-age=60, private
Content-Length: 29207
X-Cache: MISS from localhost
X-Cache-Lookup: MISS from localhost:3128
Via: 1.0 localhost (squid/3.1.19)
Strict-Transport-Security: max-age=2592000"
任何提示都非常感谢...我已经挖了几个小时并试了几个小时,我真的不知道从哪里开始
答案 0 :(得分:1)
URL http://search.apps.ubuntu.com/api/v1/search?q=不允许CORS请求,因为它不会在响应中发送Access-Control-Allow-Origin
标头。
1}}不需要。{/ p>
使用Scratchpad,您必须尝试在withCredentials
域上运行代码。如果您尝试在其他域上运行相同的代码,则无法获得响应。通过http://search.apps.ubuntu.com
运行代码时也是如此。
要解决此问题,您必须编写驻留在localhost上的服务器端脚本,并充当console
和index.html
之间的代理。该脚本将在URL上进行HTTP GET并将响应返回给index.html。
search.apps.ubuntu.com
NodeJS中的脚本
getHttp("ubuntuProxy", function(response) {
console.log(response);
});
答案 1 :(得分:0)
我的猜测是你需要对请求参数进行编码。
所以而不是:
req.open("GET", url, true);
req.send();
尝试:
req.open("GET", encodeURIComponent(url), true);
req.setRequestHeader("content-type","application/x-www-form-urlencoded");
req.send();