indexOf无法识别单词

问题描述

不确定为什么indexOf无法识别“错误”一词。

PHP脚本返回的文本为:

echo "Error: user was not updated.";

在JQuery中,我具有以下内容

$.post('api/editUser.PHP',{robj:robj},function(data){
  if(data.indexOf('Error')){
    console.log("bad - " + data);
  }
  else{
    console.log("good - " + data);
  }
});

使用上述方法,我不断得到输出“好-错误用户未更新”

控制台应显示:“错误-错误用户未更新”

indexOf问题吗?

我在做什么错了?

解决方法

indexOf返回0,因为您的单词被放置为字符串中的第一个单词。零是falsy的值,因此请尝试重写以检查indexoOf() != -1

if( data.indexOf('Error')!= -1){
   console.log("bad - " + data);
}
else{
   console.log("good - " + data);

As mdn says:

indexOf()方法返回给定元素的第一个索引 可以在数组中找到;如果不存在,则为-1。

,

如果您尝试记录indexOf返回,您会看到它返回0

console.log( "Error: user was not updated.".indexOf("Error") )

然后if (0)进入else区块

if (0) {console.log("in if")} else {console.log("in else")}

之所以发生这种情况,是因为0falsy value,这意味着当转换为布尔值时该值被视为false


要获取所需内容,可以使用indexOf === 0(如果开头没有"Error"的任何消息是有效消息,或者使用includes,如果任何包含"Error"的消息)不管它是无效的

console.log( "Error: user was not updated.".indexOf("Error") === 0 )
console.log( "Error: user was not updated.".includes("Error") )
console.log( "message with Error at the center".indexOf("Error") === 0 )
console.log( "message with Error at the center".includes("Error") )

,

尝试使用search()。它主要用于正则表达式,但是如果您使用纯文本,它将仍然有效,因为它将是有效的正则表达式。 请注意,由于它被视为 RegEx ,因此不如indexOf出色。

P.s。我知道您知道来自服务器的确切文本,但是为了保持一致性,将所有内容都转换为小写总是更安全。

这应该有效:

$.post('api/editUser.php',{robj:robj},function(data){
  if(data.toLowerCase().search('error')){
    console.log("bad - " + data);
  }
  else{
    console.log("good - " + data);
  }
});