如果声明无法在ajax成功

时间:2016-10-14 08:11:37

标签: javascript jquery ajax

我有这个HTML代码

<div class="vote">
    <div data-post-id="@item.PostId" data-vote-rank="1" class="vote-arrow vote-up glyphicon glyphicon-chevron-up"></div>
    <div class="total-vote">0</div>
    <div data-post-id="@item.PostId" data-vote-rank="-1" class="vote-arrow vote-down glyphicon glyphicon-chevron-down"></div>
</div>

这个jQuery ajax帖子

$(".vote-arrow").click(function () {
    var postId = $(this).data("post-id");
    var voteRank = $(this).data("vote-rank");

    $.ajax({
        type: "GET",
        url: "/Posts/Vote/",
        data: { postId: postId, voteRank: voteRank },
        context: this,
        success: function () {
            console.log(voteRank); //working, I get 1
            if (voteRank === "1") {
                console.log(voteRank); //nothing in the console
                $(this).css({ 'color': 'red' });
            }
            alert("working");
        }
    });
});

success中的if语句无效。

如果我用data-vote-rank="1"按div,我会在控制台中从if语句外的console.log和if语句后的alert获得1。如果我调试if-statement条件中的voteRank是一个但是我没有在if语句中获得console.log(当然也没有颜色变化)。

有什么问题?

4 个答案:

答案 0 :(得分:3)

使用==voteRank === 1,身份(===)运算符也会检查类型,它们必须匹配才能被视为相等。

.data()将内部值转换为适当的数据类型。它们不是字符串。 1 === "1"将评估为false

答案 1 :(得分:0)

在这种情况下,jQuery会将data属性转换为数字。来自documentation on .data()

  

每次尝试都将字符串转换为JavaScript值(包括布尔值,数字,对象,数组和null)。如果这样做不会更改值的表示,则只会将值转换为数字。例如,&#34; 1E02&#34;和&#34; 100.000&#34;等价于数字(数值100)但转换它们会改变它们的表示形式,因此它们被保留为字符串。字符串值&#34; 100&#34;转换为数字100。

您应该更改if语句的条件以反映这一点:

 if (voteRank === 1) {
    // snip
 }

答案 2 :(得分:0)

您是否尝试将结果转换为int。 你可以在将值应用到&#34之前使用parseInt();如果&#34;条件。

$(".vote-arrow").click(function () {
    var postId = $(this).data("post-id");
    var voteRank = $(this).data("vote-rank");
    $.ajax({
        type: "GET",
        url: "/Posts/Vote/",
        data: { postId: postId, voteRank: voteRank },
        context: this,
        success: function () {
            console.log(voteRank); //working, I get 1
            if (parseInt(voteRank) === 1) {
                console.log(voteRank); //nothing in the console
                $(this).css({ 'color': 'red' });
            }
            alert("working");
        }
    });
});

答案 3 :(得分:0)

identity(===)运算符的行为与equality(==)运算符完全相同,但不进行类型转换,并且类型必须相同才能被认为是相等的。

因此在使用它之前,将左侧变量类型转换为与右侧变量类型相同。在Ur解决方案中将voteRank转换为int

voteRank = parseInt(voteRank, 10);

然后检查

if (voteRank) === 1) {

            }