如何在 sencha touch 中跨域发布 JSON 请求
Posted
技术标签:
【中文标题】如何在 sencha touch 中跨域发布 JSON 请求【英文标题】:How to POST JSON request in cross domain in sencha touch 【发布时间】:2013-07-29 09:15:28 【问题描述】:我有以下网址
https://development.avalara.net/1.0/tax/get
并想发布以下 JSON 请求正文
"DocDate": "2011-05-11",
"CustomerCode": "CUST1",
"Addresses":
[
"AddressCode": "1",
"Line1": "435 Ericksen Avenue Northeast",
"Line2": "#250",
"PostalCode": "98110"
]
然后会给出 JSON 响应
"DocCode": "78b28084-8d9a-477c-9f26-afab1c0c3877",
"DocDate": "2011-05-11",
"Timestamp": "2011-05-11 04:26:41",
"TotalAmount": 10,
"TotalDiscount": 0,
"TotalExemption": 0,
"TotalTaxable": 10,
"TotalTax": 0.86,
“TotalTaxCalculated”: 0.86,
"TaxDate": "2011-05-11",
.......
我尝试过使用
Ext.Ajax.request
但报错
Origin http://localhost is not allowed by Access-Control-Allow-Origin.
这可能是由于具有不同的域。
所以,然后我尝试使用 JSONP
Ext.data.JsonP.request
(
url: 'https://development.avalara.net/1.0/tax/get',
callbackName: 'test',
method: 'POST',
jsonData: '"DocDate": "2011-05-11", "CustomerCode": "CUST1", "Addresses": [ "AddressCode": "1", "Line1": "435 Ericksen Avenue Northeast","Line2": "#250", "PostalCode": "98110" ] ' ,
success: function(response)
//do some successful stuff
Ext.Msg.alert(response);
,
failure: function(response)
//complain
Ext.Msg.alert('fail');
);
但遇到 URL 404(Not Found) 错误,请求方法是 GET 而不是 POST。
谁能帮我如何POST请求正文(JSON)并从不同域获得JSON响应?
提前致谢
【问题讨论】:
【参考方案1】:你不能用 POST 请求做 JSON-P,JSON-P 只支持 GET 请求。您的选择是:
-
使用带有 JSON-P 的 GET 请求
将服务器功能移动到您的 ST 应用正在运行的同一台服务器上
使用 Cordova 之类的工具,并将要用于 AJAX POST 请求的服务器列入白名单,然后使用
Ext.Ajax.request
。
【讨论】:
【参考方案2】:您有四个选择:
使用CORS。 development.avalara.net 需要在服务器上设置 CORS 并允许运行 Sencha 页面的域。
通过运行 Sencha 页面的域上的服务器进行反向代理请求:
Sencha 页面 (mydomain.com) ---> Web 服务器 (mydomain.com) ---> development.avalara.net Sencha 页面 (mydomain.com)
您还可以将表单作为常规表单发布操作发布,或在隐藏的 iframe 中发布表单。
http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.form.Basic-cfg-standardSubmit
在不会阻止跨域请求的 phonegap/cordova 中运行 Sencha 应用。
【讨论】:
感谢 Neil,反向代理工作正常,我们已经使用了一段时间,但我们也想尝试常规的 POST 表单,所以如果您提供一些示例代码会很棒。以上是关于如何在 sencha touch 中跨域发布 JSON 请求的主要内容,如果未能解决你的问题,请参考以下文章
翻译探究Ext JS 5和Sencha Touch的布局系统
Sencha Touch 2 & Spring Security 跨域登录
Sencha Touch - sencha touch js 大小的性能问题