未捕获的TypeError:this。$。AjaxPost.go不是函数 - core-ajax

时间:2015-10-29 09:54:00

标签: javascript ajax polymer

我为我们的网站编写了一个用于密码重置的HTML页面,我们希望它是对服务器的POST调用。我们正在使用聚合物和代码:

<dom-module id="user-password-reset">

<template>
    <div class="popup">

        <h5 class="popup-heading">Forgot Password</h5>

        <div class="popup-body">
            <div class="form-group">
                <label for="FormInput-UserEmail">Provide your Email Address</label>
                <input type="email" class="form-control" id="FormInput-UserEmail" placeholder="name@example.com" value="{{ email::input }}">
            </div>
            <br/>
            <div class="text-center">
                <button type="button" class="btn" on-click="onSubmit">Reset Password</button>
            </div>
        </div>

    </div>

    <core-ajax
        id="AjaxPost"
        auto="false"
        url="/api/user/email"
        method="POST"
        content-type="application/json"
        handle-as="json"
        on-core-response= _handleAjaxPostResponse
        on-core-error= _handleAjaxPostError
        ></core-ajax>

</template>


<script>
    Polymer({

        is: 'user-password-reset',

        behaviors: [
            Polymer.IronOverlayBehavior
        ],

        properties: {
            email: { type: String },
        },

        onSubmit: function( event ) {
            this.$.AjaxPost.params = JSON.stringify( { email: this.email } );
            console.log( this.$.AjaxPost );
            this.$.AjaxPost.go();
        },

        _handleAjaxPostResponse: function( event ) {
            /* Do Something */
        },

        _handleAjaxPostError: function( event ) {
            /* Do Something */      
        },
    });

</script>

</dom-module>

在控制台中:

<core-ajax id="AjaxPost" auto="false" url="http://localhost:8080/api/user/email" method="POST" content-type="application/json" handle-as="json" class="style-scope user-password-reset"></core-ajax>

并且有一个错误说:

Uncaught TypeError: this.$.AjaxPost.go is not a function

我现在该怎么办?

2 个答案:

答案 0 :(得分:0)

对不起,我忘了提到聚合物的版本。我们使用Polymer 1.0,感谢Ben Thomas指出这一点。解决方案结果很简单,无需将其转换为Json并使用iron-ajax代替core-ajax。

代码:

<iron-ajax
        id="AjaxPost"
        url="/api/user/email"
        method="POST"
        content-type="application/json"
        handle-as="json"
        on-response="_handleAjaxPostResponse"
        on-error="_handleAjaxPostError"
        ></iron-ajax>

var ajaxPost = this.$.AjaxPost;
            ajaxPost.params = { email: this.email };
            ajaxPost.generateRequest();

请注意,如果您正在使用Post调用,那么最好以params方式发送数据,而不是在body中发送数据(在某处读取)。在发送时,请不要将Json字符串化。

答案 1 :(得分:-2)

我有时候已经遇到过这个问题了。

尝试使用noConflict(),因为jquery可能与你正在运行的内容有冲突。

此页面帮助了我: https://api.jquery.com/jquery.noconflict/