- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在阅读有关 Javascript 类/对象/原型(prototype)的文章,并且来自 OOP 背景,所以我现在希望在 Javascript 中使用对象。
但是我觉得我误解了什么。例如,过去在 VB.net 中使用对象时,您创建了对象并能够使用数据类填充它。
但是在 javascript 的土地上,由于这个异步的事情,事情并没有按照我期望的方式执行。
所以我如下创建我的原型(prototype)并调用适当的函数,但该函数说它已经完成(但没有因为它没有收到正在发生的 $.post 的响应,我的代码继续为空值,我没有获取我想要的信息。
<!DOCTYPE html>
<html>
<body>
<button onclick="gogetperson()">Hello</button>
<p id="demo"></p>
<script>
function Person() {
this.firstName = '-';
this.surname= '-';
this.alias = 0;
}
Person.prototype.name = function() {
return this.firstName + " " + this.surname
};
Person.prototype.getPerson = function(personid)
{
var query = $.param({personid: personid});
var url = 'custom/person_get.php';
$.post(url, query, function (response) {
var obj = $.parseJSON(response);
this.firstname= obj['rFirstName'];
this.surname = obj['rLastName'];
this.alias = obj['rAlias'];
console.log(this.firstname);
});
}
function gogetperson()
{
var myPerson = new Person();
myPerson.getPerson(1)
console.log(myPerson.firstName);
}
</script>
<script src="plugins/jQuery/jQuery-2.1.4.min.js"></script>
</body>
</html>
因此,当我的按钮运行 gogetperson 函数时,它完成但尚未获取数据。$.post 部分中的 console.log 将我个人的名字返回到控制台,但为时已晚,我无法使用它。
我是否以错误的方式使用了原型(prototype)?
我希望在获取数据时能够使用javascript作为对象。
或者我完全错了。
我想以这种方式使用它的原因是它似乎比 php 对象更好。
我应该改用 PHP 对象吗?
我最终想从 mysql 数据库中获取数据并使用 jquery 和 javascript 轻松更改我的网页。
最佳答案
您遗漏了一件事,即使用 $.post
的 http 调用是异步的,它不是阻塞调用。为了从 getPerson()
方法中取回值,您必须在该函数中传递一个 callback(或函数)
以取回结果,但不推荐这样做方法 。您可以阅读有关 promise 的信息并使用它们,因为它们很棒。但是,使用回调,您可以执行类似的操作。
Person.prototype.getPerson = function(personid, cb)
{
var query = $.param({personid: personid});
var url = 'custom/person_get.php';
$.post(url, query, function (response) {
var obj = $.parseJSON(response);
var person = new Person();
person.firstname= obj['rFirstName'];
person.surname = obj['rLastName'];
person.alias = obj['rAlias'];
console.log(person.firstname);
cb(person);
});
}
然后你可以这样调用它,
var myPerson = new Person();
function showPersonDetails(person){
console.log(person.name())
}
myPerson.getPerson(1, showPersonDetails);
关于Javascript 对象/原型(prototype)。我的理解错了吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37093742/
我无法在附加行中显示“真”、“假”、"is"和“否”按钮。 我在这里有一个应用程序:Application 请按照以下步骤使用应用程序: 1。当你打开应用程序时,你会看到一个绿色的加号按钮,点击 在此
我是一名优秀的程序员,十分优秀!