2016-11-15 2 views
0

В моем файле js erb оба моих флеш-сообщения отображаются, когда только один должен быть. Ajax отлично работает, и мой ответ - это то, что должно быть. Однако по какой-то причине мое флеш-сообщение принимает сообщение в обоих операторах if и else. Я поставил отладчик прямо перед оператором if, чтобы проверить свой ответ, и он должен был быть оценен как true.Если инструкция else выглядит как

$.ajax({ 
      url: '/purchases/options', 
      method: 'post', 
      dataType: 'json', 
      data: data 
      }).done(function(response){ 
       if(response.duplicate === "true"){ 
        <% flash.now[:alert]= 'This Addressi Is Already In Your Cart Or In Your Report Section.' %> 
       } 
       else{ 

        <% flash.now[:notice]= 'Searchs result is added to your cart' %> 
       } 
      }); 
    $("<%= j render(:partial => 'layouts/messages') %>").insertBefore('form')[0]; 
+7

Вам необходимо понять разницу между кодом на стороне сервера и кодом на стороне клиента. Вы не можете этого сделать. – SLaks

+0

@SLaks Извините, но не могли бы вы рассказать о том, что вы имеете в виду? Я хочу вывести разностное флэш-сообщение в зависимости от моего ответа. – beewuu

ответ

1

С Еврорадио всегда собирается интерполируется до того он отправляется в браузер, ваш браузер в основном будет увидеть это:

if(response.duplicate === "true") { 
} else { 
} 

И ваш сервер будет видеть это:

flash.now[:alert]= 'This Addressi Is Already In Your Cart Or In Your Report Section.' 
flash.now[:notice]= 'Searchs result is added to your cart' 

В основном это означает, что ваш сервер всегда будет работать и тех flash линий.

Что вам нужно сделать, это переместить все в файл JS без помощи ERB и вручную установить там текст вспышки.

Например, предположим, что у вас есть следующий код на странице где-то, что будет «заполнитель» для флэш-текста:

<div id="flash"></div> 

Тогда в JavaScript, вы просто установить текст вручную :

$("<%= j render(:partial => 'layouts/messages') %>").insertBefore('form')[0]; 

$.ajax({ 
    url: '/purchases/options', 
    method: 'post', 
    dataType: 'json', 
    data: data 
}).done(function(response){ 
    if (response.duplicate === "true") { 
    $("#flash").text("This Addressi Is Already In Your Cart Or In Your Report Section."); 
    $("#flash").addClass("alert"); 
    } else{ 
    $("#flash").text("Searchs result is added to your cart"); 
    $("#flash").addClass("notice"); 
    } 
}); 
+0

очень хорошо сказано. Спасибо большое! что делает его гораздо более понятным – beewuu

1

Любой ruby код (очевидно, внутри рубина тега) внутри javascript всегда будет выполняться, независимо от состояния if.

Скорее вы можете установить flash сообщений в контроллере или, если вы хотите, чтобы показать сообщение об ошибке/успехе в текущей странице, а затем использовать JS код вместо как $(your-element).text("your-text")

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