0

我有以下网址

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。

谁能帮助我如何发布请求正文(JSON)并从不同域获得 JSON 响应?

提前致谢

4

2 回答 2

2

你不能用 POST 请求做 JSON-P,JSON-P 只支持 GET 请求。您的选择是:

  1. 使用带有 JSON-P 的 GET 请求
  2. 将服务器功能移动到您的 ST 应用程序正在运行的同一台服务器上
  3. 使用 Cordova 和 Whitelist 之类的东西,将要用于 AJAX POST 请求的服务器,然后使用Ext.Ajax.request.
于 2013-07-29T14:23:25.013 回答
2

您有四个选择:

  1. 使用CORS。development.avalara.net 需要在服务器上设置 CORS 并允许运行 Sencha 页面的域。

  2. 通过运行 Sencha 页面的域上的服务器反向代理请求:

    Sencha 页面 (mydomain.com) ---> Web 服务器 (mydomain.com) ---> development.avalara.net
    Sencha 页面 (mydomain.com) <--- Web 服务器 (mydomain.com) <--- 开发.avalara.net

  3. 您还可以将表单作为常规表单发布操作发布,或在隐藏的 iframe 中发布表单。

    http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.form.Basic-cfg-standardSubmit

  4. 在不阻止跨域请求的 phonegap/cordova 中运行 Sencha 应用程序。

于 2013-07-29T17:29:43.597 回答