带ajax请求的Polymer 1.0计算变量
我试图基于ajax调用计算一个polymer变量,并将另一个变量作为属性 例如,我想传递一个如下所示的变量:带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
<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));
}
});