0

我想通过 post json 数据发送。

我阅读了 API 文档(在异步世界中工作API 文档 IOAsyncRequestCfg),他们说应该这样发送:

  /* called when the template has been successfully rendered. */
    $viewReady : function(){
        console.log("$viewReady");

        var pnr = this.data.pnr;
        var names = this.data.names;
    var namesResults = [];

    if (names.length > 0) 
    {
        var monto = this.callAjaxService('https://localhost/Service1.asmx/SetNames?jsonp=false', names);//REST service
    }               
   },

对服务的调用是:

callAjaxService : function (urlString, data) {
    console.log("callAjaxService");  
    console.log(urlString);

    console.log(JSON.stringify(data));  
    aria.core.IO.asyncRequest({
        url : urlString,
        timeout : 10000,
        async: true,
        method: "POST",
        data: JSON.stringify(data),  
        contentType: "application/json",
        callback : {
            fn : this.onSuccessId,
            scope : this,
            onerror : this.onError,
            onerrorScope : this
        }
    });
},

我认为它没有离开 aria 模板的请求,请求永远不会到达服务器。因为我得到的回应是:

错误:“错误” 错误
文本:“错误 #2048” 错误
类型:“安全错误” reqId:249
响应文本:“未定义”
状态:0 状态
文本:“xdr:错误”

我正在 IIS 上调试服务,但它永远不会到达那里。我已经用其他客户端测试了该服务并且它有效。

新方法,一位合伙人告诉我:

启用 CORS 后,您可以使用基于 XHR 的常规传输。为了告诉 Aria 模板这样做,您可以在任何跨域请求之前执行此代码:

aria.core.IO.updateTransports({ 'crossDomain': 'aria.core.transport.XHR' });

此外,由于 CORS 控制客户端可以将哪些 HTTP 标头添加到请求中的方式,您还应该执行以下代码:

aria.core.IO.useXHRHeader = false;

将这两行添加到请求中可以使请求到达服务器。但是,现在我们得到了服务的响应

error:"13030"    
reqId: 255    
responseText:""    
responseXML:null    
status:13030
url:"https://localhost/Service1.asmx/GetNames?jsonp=true&callback=pol

服务器的响应是一个 JSON 结构。我们正在研究如何获得正确的回应。

4

2 回答 2

0

也许这有帮助

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="charset=utf-8" />
    <title>Hello World</title>
    <script type="text/javascript" src="http://cdn.ariatemplates.com/atlatest.js"></script>
</head>
<body>
  <div id="myContainer"></div>
  <script type="text/javascript">
    aria.core.IO.asyncRequest({
        url : 'http://httpbin.org/post',
        method : "post",
        callback : {
            fn : function (response, args) {
                console.log('response:', response);
            },
            scope : this
        }
    });
  </script>
</body>
</html>
于 2016-06-14T17:47:42.163 回答
0

新方法是解决方案。一位合伙人告诉我:

启用 CORS 后,您可以使用基于 XHR 的常规传输。为了告诉 Aria 模板这样做,您可以在任何跨域请求之前执行此代码:

aria.core.IO.updateTransports({ 'crossDomain': 'aria.core.transport.XHR' });

此外,由于 CORS 控制客户端可以将哪些 HTTP 标头添加到请求中的方式,您还应该执行以下代码:

aria.core.IO.useXHRHeader = false;

将这两行添加到请求中使其工作。

于 2016-06-16T18:00:20.013 回答