2015-01-05 1 views
2

Я работаю над кодом, написанным кем-то другим. Насколько мне известно, его не правильно, но я не вижу каких-либо ошибок, и теперь я не уверен, что если что-то изменилось, начиная с версии 8.CFML в Javascript

код, как показано ниже & Я хочу знать, если вы можете использовать CFML с Javascript кодом

<script language="JavaScript" type="text/JavaScript" > 
    var x = 2; 
    <cfif url.new = true>var x = 5 </cfif> 
</script> 
+1

' var x = 5' Неверный синтаксис. Использовать ' var x = 5' – RRK

ответ

3

Вы не можете использовать CFML внутри JavaScript, потому что ColdFusion работает на сервере, а JavaScript работает на клиенте. Однако вам нужно подумать о том, как работает CFML, CFML-код обрабатывается на сервере, а затем вывод передается клиенту. Таким образом, в вашем случае приведенный вами пример действителен. CFML будет обработан на сервере, и один из двух выходов будет сгенерирован и передан обратно клиенту.

ПРИМЕЧАНИЕ. Вы не включили весь код, поэтому я предполагаю, что перед этим существует дополнительный код, который проверяет наличие переменной url.new. В противном случае, если аргумент new не передан в URL-адресе, тогда будет выведено сообщение о том, что переменная не существует.

Если URL-адрес не содержит аргумент с именем «новый»; http://www.yourdomain.com/somepage
или «новый» аргумент существует, но его значение не считается «истинным»; http://www.yourdomain.com/somepage?new=false
, то выход будет:

<script language="JavaScript" type="text/JavaScript" > 
    var x = 2; 
</script> 

Обратите внимание, что значение «х» в сгенерированном JavaScript будет 2.

Если URL действительно содержит аргумент с именем «новый» и его значение считается «истинным»; http://www.yourdomain.com/somepage?new=true
, то выход будет:

<script language="JavaScript" type="text/JavaScript" > 
    var x = 2; 
    var x = 5 
</script> 

Обратите внимание, что значение «х» в сгенерированном JavaScript будет 5, однако есть также отсутствует точка с запятой в конце строки так, ваш пример может вызвать ошибку JavaScript.

Обратите внимание, что я также упоминаю «если значение считается истинным или ложным». В ColdFusion булевы выражения, True, ненулевые числа и строки «Да», «1 |», «Истина» эквивалентны; и False, 0, а строки «Нет», «0» и «Ложные» эквивалентны. Булевая оценка не чувствительна к регистру. Например, True, TRUE и true эквивалентны. Поэтому в вашем примере http://www.yourdomain.com/somepage?new=1 также будет считаться истинным.

3

Хорошо: вы не используете «CFML с кодом Javascript» так, как вы предлагаете. У вас есть некоторый текст, и CFML оказывается (условно) генерирует какой-то другой текст.

Текст он генерирует будет один из:

<script language="JavaScript" type="text/JavaScript" > 
    var x = 2; 
    var x = 5 
</script> 

Или

<script language="JavaScript" type="text/JavaScript" > 
    var x = 2; 

</script> 

В зависимости от значения URL.new. В любом случае, это всего лишь текст в точке, на которой CFML-сервер имеет какой-либо вход в нее.

Этот текст затем отправляется обратно на веб-сервер, который отправляет его обратно в браузер, который его запросил.Затем браузер интерпретирует текст как HTML, а внутри HTML - это текст, который, как ему сказали, рассматривается как JavaScript. И так он делает (рассматривает его как JavaScript и запускает его).

Но уже давно сервер CFML имел к этому какое-либо отношение. На всем сервере CFML он выводит текст.

Это может помочь вашему пониманию жизненного цикла запроса/ответа визави сервера CFML: «The CFML request/response process»

+0

. Рекомендуемая ссылка на статью в блоге, объясняющая парадигму сервера приложений –

0

Несколько вещей, которые я могу видеть, не так с вашим кодом здесь - это то, что я бы там вместо:

<script> 
    var x = 2; 
    <cfif structKeyExists(URL, "new") AND URL.new IS true>x = 5;</cfif> 
</script> 
  1. Я добавил проверку, чтобы увидеть, если переменная «новой» существует в рамках URL - только в случае, если вы не сделали это в другом месте.

  2. Если ваш оператор CFIF вы используете =, когда вы должны использовать EQ или IS. Я не знаю, почему CFIF-логика имеет различный синтаксис для того, что вы можете ожидать на самом деле, и я не на 100% от разницы между IS и EQ с головы.

  3. Вы уже объявили VAR x = 2, поэтому вам не нужно снова определять переменную - строгий механизм JavaScript может вызвать ошибку. Он уже определен, поэтому просто установите для него значение.

  4. Как уже упоминалось, вам не хватает полуколонны в конце вашей инъекционной линии CF.

Код, который вы должны получить вынес из бы:

<script> 
    var x = 2; 
    x = 5; 
</script> 

Помимо этого она действует, что вы пытаетесь сделать. У меня часто есть мотив CF> JavaScript в моей работе - пока вы понимаете, что он запускается во время компиляции, прежде чем страница будет передана на веб-сервер, а другая будет работать на клиентской машине во время выполнения.