2013-09-16 2 views
1

Я получаю данные из некоторого АЯКСА операции, и пытаюсь использовать JavaScript, чтобы сделать некоторые условные проверки фактическиКак сравнить значения в JavaScript

поэтому, когда я напечатать ответ от Аякса как

document.write(response) 

результат

[object Object] 

, когда я напечатать что-то вроде document.write(JSON.stringify(response))

результат

{"status":"failed","login":["This field is required."],"password":["This field is required."]} 

так выше фактические данные, я получаю то, что я пытаюсь сделать, это

if(response.status === 'failed') 
      window.location.href = response.next; 
     else if ('login' in response && response['login']==["This field is required."]) 
      { 
       $("#message").html(<p>Username is required</p>); 
      } 
     else if ('password' in response && response['password']==["This field is required."]) 
      { 
       $("#message").html(<p>Password is required</p>); 
      } 

Но && состояние response['login']==["This field is required."] не работает так как проверить значение вышеуказанного типа в javascript?

Примечание: * Новое в JavaScript *

+0

Если у вас будет массив значений для входа в систему, вы можете использовать метод [indexOf] (http://www.w3schools.com/jsref/jsref_indexof.asp) вместо "==" , 'reponse.login.indexOf ('Это поле необходимо')! == -1' – Stefan

ответ

1

Доступ к различным свойствам объекта ответа с использованием оператора точек.

response.login[0] === "This field is required." 

Чтобы сообщить вам, что здесь происходит, вы возвращаете объект json. Свойства в объекте json можно получить простым использованием .PropertyName. Ваше свойство login - это массив, и вы хотите получить доступ к первому элементу массива, поэтому вы используете индекс [0]. Наконец, вы сравниваете строки, поэтому лучшей практикой в ​​javascript является использование оператора ===, который будет сравнивать тип и значение.

+0

Проблема заключается не в том, что они не используют оператор точки - оператор в квадратных скобках так же синтаксически корректен. И это не отсутствие ===. Но скорее факт, что они сравнивают массивы, когда они действительно хотят сравнивать строки. – Matt

1

Попробуйте эту проверку вместо этого. Он сравнивает первую позицию массива login.

response['login'][0] == "This field is required." 
0

удалить []. это массив. вы должны сравнить со строкой

+0

-1: Неясно, что' [] 'вы предлагаете удалить. И если вы не удалите его как в ответе, так и в операторе if, вам нужно будет сделать что-то еще, чтобы получить эту работу. – musefan

0

JSON - это в основном переносимый формат синтаксиса Javascript. Вы сравниваете неправильные вещи. После того, как строка JSON декодируется в Javascript, она становится объектным/массивом javascript NATIVE. Таким образом, учитывая ваш образцы JSOns Тринга, вы должны делать

(response.password[0] == 'This field is required') 

Обратите внимание на отсутствие [] скобки вокруг «поля ...» текст. Ваш код эффективно

if (string == array) 

, когда он должен быть

if (string == string) 

(используя ту же позицию для членов сравнения).

0

вы можете попробовать это: -

response['login'][0] == "This field is required." 
1

Поскольку массив не равен другому массиву. Затем проверьте response['login'][0], чтобы сравнить строки.

> var array1 = ['array']; 

> array1 == ['array'] 
< false 

> array1[0] == 'array' 
< true 
0

Вы не можете сравнить массивы в JavaScript с ==.

Это как: {} == {} // false Два объекта не совпадают.

Таким образом, вы бы также ожидать: new Foo() == new Foo(); // false

и точно так же: new Array() == new Array() // false

[] представляет собой сокращенную new Array() (это немного сложнее, но игнорировать это сейчас).

Смежные вопросы