聚合物点击是双重发布

时间:2015-03-03 20:27:41

标签: polymer

我想知道这里是否有人在发布表格时遇到类似的问题。我的代码非常简单,如前所述,每次单击按钮时,表单都会发布两次。我正在使用Polymer 05.5

<polymer-element name="book-form">
    <template>
        <label for="title">Title:</label>
        <input id="title" value="{{title}}" />
        <label for="author">Author:</label>
        <input id="author" value="{{author}}" />
        <label for="image">Image:</label>
        <input id="image" value="{{image}}" />
        <button on-click="{{fireAjax}}">Submit Form</button>
        <core-ajax id="ajax"
                   auto
                   url="http://localhost:45922/api/book"
                   handleAs="json"
                   method="POST"
                   >
        </core-ajax>     
    </template>
    <script>
        Polymer({
            fireAjax: function () {
                var data = { image: this.image, author: this.author, title: this.title };
                this.$.ajax.contentType = 'application/json';
                this.$.ajax.body = JSON.stringify(data);
                this.$.ajax.go();
            }
        });
    </script>
</polymer-element>

2 个答案:

答案 0 :(得分:2)

您的fireAjax函数会更改core-ajax的数据。因为auto已启用,所以会触发ajax调用。然后你拨打this.$.ajax.go(),这样就可以再次拨打电话。

尝试删除core-ajax元素中的auto

答案 1 :(得分:0)

好的,我发现问题是什么,只要url或参数发生变化,表单上的auto属性就会发布。如果想要控制何时发生POST,他们应该从core-ajax中删除auto属性。

<polymer-element name="book-form">
    <template>
        <label for="title">Title:</label>
        <input id="title" value="{{title}}" />
        <label for="author">Author:</label>
        <input id="author" value="{{author}}" />
        <label for="image">Image:</label>
        <input id="image" value="{{image}}" />
        <button on-click="{{test}}">Submit Form</button>
        <core-ajax id="ajax"
                   url="http://localhost:45922/api/book"
                   handleAs="json"
                   method="POST"
                   >
        </core-ajax>     
    </template>
    <script>
        Polymer('book-form', {
            test: function () {
                var data = { image: this.image, author: this.author, title: this.title };
                this.$.ajax.contentType = 'application/json';
                this.$.ajax.body = JSON.stringify(data);
                this.$.ajax.go();
            }
        });
    </script>
</polymer-element>