返回Ajax值时隐藏按钮

6

这是一个按钮,点击它会通过 ajax 执行某些任务。通过 ajax 我得到了一个 JSON 格式的结果,在控制台中看起来像这样:

 ["25", 16, "ABC", "DEF", 1]

现在我想要的是,只要第4个位置上有1,我希望隐藏一些按钮。我编写的代码是:

$.ajax({
    type: 'post',
    url: 'script.php',
    dataType: 'json',
    data: {
      txt: txtbox,
      hidden: hiddenTxt
    },
    cache: false,
    success: function(returndata) {

        if(returndata[4]=='1')
        {
            $("#first").hide();
            $("#second").hide();
            $("#third").hide();
        }

    },
    error: function() { 
      console.error('Failed to process ajax !');
    }

  });

if条件似乎有效,因为我尝试在if条件中放置了一个警告框,它起作用了,但是按钮仍然显示。

我尝试使用带有警告框的测试代码:

if (returndata[4] == 1) 
    {
        alert("1");
    }

请问为什么会发生这种情况?


if(returndata[4]===1) - JohnnyAW
3
当您将console.log(returndata)作为第一行添加到您的成功函数中时,在JavaScript控制台中显示什么? - James Donnelly
1
什么鬼?那怎么可能是一个数字?不应该是一个对象吗?那么服务器出了问题! - Praveen Kumar Purushothaman
6
我想我没有正确提出我的问题,因此我更新了我的帖子。如果您需要了解有关该问题的其他任何信息,请告诉我,并且如果您能帮助我找到解决方案,我将不胜感激。 - user4622110
6
@Praveen Kumar 我很抱歉没有妥善地提出我的问题,我已经更新了我的帖子,如果你能帮助我就好了,但还是感谢你浏览我的帖子。 - user4622110
显示剩余15条评论
4个回答

1

我知道这是你已经做过的事情。我正在努力解决你的问题。我们一步一步来。首先尝试,用这个代替你的代码:

$.post("script.php", {txt: txtbox, hidden: hiddenTxt}, function (res) {
  alert("Response: " + res);
  alert("Type: " + typeof res);
});

请在评论中告诉我您的结果。干杯。

0

在您的隐藏部分中,您已经匹配了一个 '1' 作为 string,但在警告部分却匹配了一个 1 作为 number。这可能是问题所在。

避免这种情况

if(returndata[4]=='1') 

使用这个

if(returndata[4] == 1)   

1
请仔细阅读注释。 - Sougata Bose
@prem。这不是问题。在JavaScript中,如果返回的数据为1或'1','1'和1都将等于true。我们不是使用类型相等进行比较-https://jsfiddle.net/yf6Lud24/ - Rohan Büchner

0

尝试跟随您的ajax方法中的更改...

  1. 使用 GET 方法而非 POST 方法
  2. 不需要使用 dataType: 'json'

    $.ajax({
    type: 'GET',
    url: 'script.php',
    data: {
      txt: txtbox,
      hidden: hiddenTxt
    },
    cache: false,
    success: function(returndata) {
    
        if(returndata[4]=='1')
        {
            $("#first").hide();
            $("#second").hide();
            $("#third").hide();
        }
    
    },
    error: function() { 
      console.error('Failed to process ajax !');
    }
      });
    

敬礼
普雷姆


0

在评论中,我看到您发布了ajax结果:

["25", 16, "ABC", "DEF", 1] 

你的问题在于比较运算符是==="1"(我在回答时看到了这种比较方式),而你拥有的是数字1,而不是字符串"1"。 === 表示类型比较,因此正确的方式会返回 false,因为 1 是数字而 "1" 是字符串。你可以通过将条件更改为以下内容来解决这个问题:
returndata[4]===1

或者不进行类型检查:

returndata[4]==1

就是这样。

为了更好地理解这个答案,我准备了一些例子。

console.log("1 === '1'");
console.log(1==='1');

console.log("1 === 1");
console.log(1===1);


console.log("1 == '1' ( no type comarision )");
console.log(1=='1');


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接