聚合物 1.0 铁阿贾克斯不发布数据


<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>

这不会将数据正确发布到服务器。同样,当我放入控制台时.log在 iron-ajax.html 文件中,我发现 contentType 仍然设置为 application/x-www-form-urlencoded .文档说我们可以通过指定contentType = {String}来指定 contentype。

你的方法实际上对我有用。

但是,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">

在 0.5 中,我知道 core-ajax 总是存在无法正确发送正文对象的问题。我一直在使用的解决方法是将身体串起来。

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

iron-ajax 主体使用原始数据,因此如果需要,您可以使用在 iron-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"
    });

还可以使用计算属性并生成此查询字符串

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

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

这不是有效的 Polymer 数据绑定表达式。

元素中应有一个属性,并使用正确的绑定表达式,例如:

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

如果设置了正确的内容类型,则正文将作为 json 正确发送。

最新更新