2015-06-20 4 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> 

Это не правильное размещение данных на сервере. Также, когда я вставляю в console.log внутри файла iron-ajax.html, я узнал, что contentType все еще задан как application/x-www-form-urlencoded. В документации указано, что мы можем указать тип контента, указав contentType = {String}.Polymer 1.0 iron-ajax не размещать данные

ответ

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

железо-Аякса корпус использование сырья данных, так что если вы хотите, вы можете использовать ту же самую функцию, которая используется внутри в железо-Аякса для параметров для генерации 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"> 

Смежные вопросы