Ошибка JavaScript при выполнении функции оповещения через php - PullRequest
1 голос
/ 02 декабря 2009

Я использую карты слияния в одном из моих приложений.

В одном из примеров мне нужно передать значение из одной карты в другую,

Я сталкиваюсь с одной проблемой, если переданные данные являются числовыми, при этом корректно отображается предупреждающее сообщение, но если это строка, выдает ошибку:

NM is not defined

JavaScript: предупреждение (NM) ()

Мой код, как показано ниже:

$strXML .= "<entity id='" . $rs1['Internal_Id'] . "' value='" . round((($rs1['datap'] /  $sumdata) * 100),2) . "' link='javascript:alert(".($rs1['Internal_Id']) . ")'  />";

Если я изменю часть ссылки (пропуская одинарные кавычки в предупреждении), то есть:

$strXML .= "<entity id='" . $rs1['Internal_Id'] . "' value='" . round((($rs1['datap'] /  $sumdata) * 100),2) . "' link='javascript:alert('".($rs1['Internal_Id']) . "')'  />";

Отображает недопустимые данные XML.

Пожалуйста, помогите мне в этом

Спасибо

Панкай

Ответы [ 3 ]

1 голос
/ 02 декабря 2009

Используйте \" вместо ' для окружения строки JavaScript.

$strXML .= "<entity id='" . $rs1['Internal_Id'] . "' value='" . round((($rs1['datap'] /  $sumdata) * 100),2) . "' link='javascript:alert(\"".($rs1['Internal_Id']) . "\")'  />";

Что происходит, так это то, что созданный XML выглядит так:

<entity id='NM' value='1' link='javascript:alert('NM')'/>

Что, как вы должны видеть из подсветки синтаксиса SO, заканчивает значение атрибута ссылки после javascript:alert(', поскольку вы используете те же кавычки для javascript, которые вы используете для окружения значений атрибута.

Использование другой кавычки (" вместо ') не заканчивает значение атрибута (снова см. Выделение синтаксиса)

<entity id='NM' value='1' link='javascript:alert("NM")'/>


В PHP мы должны экранировать кавычку (используя \), чтобы она не интерпретировалась интерпретатором php как специальный символ и использовалась для завершения строки, поэтому в php вы должны написать \"

0 голосов
/ 02 декабря 2009

Попробуйте:

$strXML .= "<entity id='" . $rs1['Internal_Id'] . "' value='" . round((($rs1['datap'] /  $sumdata) * 100),2) . "' link='javascript:alert(\"".($rs1['Internal_Id']) . "\")'  />";

В основном экранирование кавычек:)

0 голосов
/ 02 декабря 2009

Вы должны изменить свой

ink='javascript:alert('".($rs1['Internal_Id']) . "')'

от

ink='javascript:alert(\"".($rs1['Internal_Id']) . "\")'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...