0

每次我尝试使用 sencha touch 获取 json 提要时,我总是会收到此错误。

XMLHttpRequest cannot load http://api.example.com/index.php/news/all/format/json?_dc=1342630239638&node=root. Request header field X-Requested-With is not allowed by Access-Control-Allow-Headers.

我怎样才能解决这个问题来阻止这个我真的很想和 sencha 一起工作,但我的大部分工作都将与 json 提要一起工作???

任何帮助

我的json输出看起来像这样它没有rootproperty节点?

[{
    "id": "7253",
    "title": "hello",
    "description": "",
    "source": "syrianews",
    "cat_name": "Syrianews"
}, {
    "id": "7208",
    "title": "hello",
    "description": "",
    "source": "syrianews",
    "cat_name": "Syrianews"
}]
4

2 回答 2

0

您似乎正在尝试执行不允许的跨域 Ajax 请求。Ajax 请求具有相同域、相同端口、相同协议的安全要求。如果您从http://www.tinyfactory.co/加载您的应用程序,然后尝试向http://api.example.com/发出 Ajax 请求,则安全沙箱将不允许它。

但有希望。输入 JSONP。如果您请求数据的域运行良好,JSONP 或填充的 JSON (http://en.wikipedia.org/wiki/JSONP) 是绕过此安全策略的一种方法。通常,您会在 API 上看到一个名为“回调”的参数,它的作用是将数据包装在您声明的 Javascript 函数中。例如:

http://api.example.com/datafeed.json?callback=foo

将返回数据

foo({fName: 'Alex', lName: 'Rolek'});

JSONP 能够通过将脚本标记动态插入到 DOM 中来实现这一点,并将 'src' 属性设置为您使用回调请求 var 请求的 API。当 API 返回响应时,会在您的应用程序中调用函数“foo”,您可以开始使用响应数据。

在 Sencha Touch 中,更改:

proxy: 'ajax'

proxy: 'jsonp'

根据您的要求。只要 API 接受回调,Sencha Touch 就会完成剩下的繁重工作。

有关更多信息,请查看:

http://docs.sencha.com/touch/2-0/#!/api/Ext.data.proxy.JsonP

希望这可以帮助。

于 2012-07-18T18:44:27.410 回答
0

Sencha 可以读取这样的非 root 响应吗?

[{“id”:“7253”,“title”:“hello”,“description”:“”,“source”:“syrianews”,“cat_name”:“Syrianews”},{“id”:“7208” ,“标题”:“你好”,“描述”:“”,“来源”:“叙利亚新闻”,“猫名”:“叙利亚新闻”}]

于 2012-08-11T15:05:49.480 回答