Aria模板 - 通过POST

时间:2016-06-13 20:58:38

标签: javascript ajax ariatemplates

我想通过post json数据发送。

我阅读了API文档(working in an asynchronous worldAPI doc 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模板中获取请求永远不会到达服务器。因为我得到的回应是:

  

错误: “错误”
  errorText:“错误#2048”
  ERRORTYPE: “的securityError”   REQID:249
  responseText的: “未定义”
  状态: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结构。我们正在研究如何做出正确的回应。

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

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

  

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

     

aria.core.IO.updateTransports({&#39; crossDomain&#39;:   &#39; aria.core.transport.XHR&#39; });

     

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

     

aria.core.IO.useXHRHeader = false;

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