2015-06-20 47 views
2
<dom-module id="my-new-app"> 
<style> 
</style> 
<template> 

    <iron-ajax 
     id="ajax" 
     handle-as="json" 
     content-type="application/json" 
     method="POST" 
     body={"user":2,"dob":"2015-06-10","jobs":1,"skills":[],"about":"cool"} 
     on-response="hresponse" 
     debounce-duration="3000"> 
    </iron-ajax> 
    <button on-click="setajax">Click me</button> 
</template> 
<script> 
Polymer({ 
    is: "my-new-app", 
    setajax: function() { 

     this.$.ajax.url="http://127.0.0.1:8000/users/"; 
    this.$.ajax.generateRequest(); 
    }, 
    hresponse: function(request) { 
    console.log(request.detail.response); 
    console.log(this.$.ajax.lastResponse); 
    console.log(this.$.ajax.params); 
    } 
}); 
</script> 
</dom-module> 

这不会正确发布数据到服务器。另外,当我把iron-ajax.html文件放在console.log中时,我发现contentType仍然设置为application/x-www-form-urlencoded。该文件说明我们可以通过指定contentType = {String}来指定内容类型。聚合物1.0铁阿贾克斯不发布数据

回答

0

在0.5我知道核心ajax总是有一个问题没有正确发送正文对象。我一直在使用的工作是对身体进行串联。

setajax: function(){ 
    ajax.body = JSON.stringify({ 
     "user": 2, 
     "dob": "2015-06-10", 
     "jobs": 1, 
     "skills": [], 
     "about": "cool" 
    }) 
    ajax.generateRequest() 
    } 
+0

我试图用聚合物1.0工作。我已经尝试使用stringify。我写的调试脚本在contentType中没有显示任何改变。 – ahumblenerd

0

铁AJAX身体使用原始数据,因此,如果你愿意,你可以使用在内部使用的相同功能的铁AJAX的参数生成POST查询字符串参数是这样的:

var Util = { 
    getQueryString: function (params) { 
     var queryParts = []; 
     var param; 
     var value; 

     for (param in params) { 
      value = params[param]; 
      param = window.encodeURIComponent(param); 

      if (value !== null) { 
       param += '=' + window.encodeURIComponent(value); 
      } 

      queryParts.push(param); 
     } 

     return queryParts.join('&'); 
    } 
}; 

,然后你可以使用它像这样:

this.$.ajax.body = Util.getQueryString({ 
     "user": 2, 
     "dob": "2015-06-10", 
     "jobs": 1, 
     "skills": [], 
     "about": "cool" 
    }); 

你也可以使用计算性能,并生成该查询字符串

0

您设置body属性的方式不正确。

body={"user":2,"dob":"2015-06-10","jobs":1,"skills":[],"about":"cool"} 

这不是有效的聚合物数据绑定表达式。

你应该在你的元素的属性,并使用正确的绑定表达式,如:

body="{{myBodyProperty}}" 

... 
properties:{ 
myBodyProperty:{ 
    type:Object, 
    value:{foo:"bar"} 
} 
} 

如果设置正确的内容类型,然后身体将被正确发送为JSON。

2

你的方法实际上为我工作。

但是,body属性必须用引号引起来(因为所有属性都应该)。

您可以尝试在你的情况下,使用单引号:

<iron-ajax 
    id="ajax" 
    handle-as="json" 
    content-type="application/json" 
    method="POST" 
    body='{"user":2,"dob":"2015-06-10","jobs":1,"skills":[],"about":"cool"}' 
    on-response="hresponse" 
    debounce-duration="3000">