Значение переменной, отображаемое в консоли, не соответствует критерию равенства - PullRequest
0 голосов
/ 01 декабря 2011

с учетом следующего: где data - строка, полученная в качестве значения AJAX, а данные имеют значение 'good':

console.log data          # good
console.log typeof data   # string
console.log typeof 'data' # string

if data is 'good'
  console.log 'test' # NOTHING!!!

Я не понимаю ...

заставляет меня хотеть старый добрый JavaScript ...

Более полный пример после предложения:

Следующее также не работает ...

  $('#profile_slug').keyup(()->
    if $(this).val() != original_slug
      value = encodeURIComponent $(this).val()
      console.log value
      $.get('/live_validate/slug?slug='+value, (data)->

        console.log data
        console.log typeof data
        console.log typeof 'data'

        `
        if (data == 'good') {
          console.log('test');
        }

       `

обновление 2

как ни странно:

console.dir data
console.dir 'good'

good
No Properties

good
No Properties

обновление 3

контроллер

  if @slug.nil?
    @message = "good"
  else
    @message = "bad"
  end

просмотр

!= @message

coffeescript

new_data = data.replace /^\s+|\s+$/g, ""

результат

то же самое *

обновление 4 + ответ

Этот код оказался тем, что мне было нужно, поначалу он не очень хорошо работал со всем остальным, что у меня происходило, но это последняя часть головоломки, позволяющая мнечтобы не было невидимых пробелов до или после полученной строки.

    $.get('/live_validate/slug?slug='+value, (data)->
        # console.log data

        stripped_data = data.replace /^\s+|\s+$/g, ""

        # console.log encodeURIComponent data
        # console.log (data.charCodeAt(i) for i in [0...data.length])       


        if stripped_data is 'good'
          $('#profile_slug').addClass('valid-field')
          $('#profile_slug').removeClass('invalid-field')
        else if stripped_data is 'bad'
          $('#profile_slug').addClass('invalid-field')
          $('#profile_slug').removeClass('valid-field')

Ответы [ 2 ]

2 голосов
/ 01 декабря 2011

Это странно, но я предполагаю, что в одной из двух 'good' строк сравнения используются символы Юникода, которые похожи на ожидаемые символы ASCII, но не равны им.Попробуйте это:

console.log (data.charCodeAt(i) for i in [0...data.length])

Когда data = 'good', я получаю

[ 103, 111, 111, 100 ]
0 голосов
/ 01 декабря 2011

В конце строки ответа ajax он стал невидимым символом ... спасибо всем!

...