带ajax请求的Polymer 1.0计算变量

带ajax请求的Polymer 1.0计算变量,polymer,polymer-1.0,Polymer,Polymer 1.0,我试图基于ajax调用计算一个polymer变量,并将另一个变量作为属性 例如,我想传递一个如下所示的变量: <my-custom-element user-email="test@test.com"></my-custom-element> 这不起作用,并且未定义变量。 我怎样才能做到这一点? 是吗?这里的问题是由ajax回调是异步的这一事实引起的。 您在此函数中定义的内容xhr.onload=function(){将在ajax调用完成时触发。在此处返回true或fa

我试图基于ajax调用计算一个polymer变量,并将另一个变量作为属性

例如,我想传递一个如下所示的变量:

<my-custom-element user-email="test@test.com"></my-custom-element>
这不起作用,并且未定义变量。 我怎样才能做到这一点?
是吗?

这里的问题是由ajax回调是异步的这一事实引起的。 您在此函数中定义的内容
xhr.onload=function(){
将在ajax调用完成时触发。在此处返回true或false不会产生将返回值分配给
exists
的效果。相反,
\u getExistsFromEmail
的返回值分配给
exists
,这是未定义的。由于异步性,也不可能将但是,您可以按如下方式实现您想要的(假设您的ajax代码按预期工作)


无论何时
userEmail
发生更改,都会调用
\u getExistsFromEmail
。在其中,
存在
会在收到ajax响应时更新。

返回语句是针对onload函数的,而不是针对原始函数的。
 Polymer({
  is: "my-custom-element",

  properties: {
    userEmail: {
      type: String,

    },
    exists: {
      type: Boolean,
      computed: '_getExistsFromEmail(userEmail)'
    }
  },
  _getExistsFromEmail: function(userEmail) {
    var xhr = new XMLHttpRequest();

    xhr.open('POST',
        encodeURI('http://api.test.im/land_emails'));
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    var that = this;
    xhr.onload = function () {
      var responseJson = JSON.parse(xhr.responseText);

      if (xhr.status === 200 || xhr.status === 201) {
        if (responseJson.status) { // If user exists

          return true;

        }
        else { // User does not exists
          return false;
        }

      }

    };

    var params = "email=" + userEmail;
    xhr.send(encodeURI(params));
  }})
Polymer({
    is: "my-custom-element",

    properties: {
        userEmail: {
          type: String
        },
        exists: {
          type: Boolean,
        }
    },

    observers: ['_getExistsFromEmail(userEmail)'],

    _getExistsFromEmail: function(userEmail) {
        var xhr = new XMLHttpRequest();

        xhr.open('POST',
            encodeURI('http://api.test.im/land_emails'));
        xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        var that = this;
        xhr.onload = function () {
          var responseJson = JSON.parse(xhr.responseText);

          if (xhr.status === 200 || xhr.status === 201) {
            if (responseJson.status) { // If user exists

              this.exists = true;

            }
            else { // User does not exists
               this.exists = false;
            }

          }

        }.bind(this);

        var params = "email=" + userEmail;
        xhr.send(encodeURI(params));

    }
});