javascript амперсанд (&) в возвращаемых данных не будет отображаться как значение - PullRequest
1 голос
/ 26 января 2010

У меня есть этот бит кода:

...
var aData = request.responseXML.getElementsByTagName('data')[0];
var sDescription = aData.getElementsByTagName('description')[0].firstChild.data;

alert(escape(sDescription));
document.getElementById('tempLabourLineDescription').value = sDescription;
...

sDescription выводит: SUPPORT ASSY-FUEL TANK MOUNTING, R&R (LH) (L-ENG)

Я думаю, что очевидно, что я хочу сделать здесь (введите sDescription в поле с именем tempLabourLineDescription, но это просто не будет работать.

Однако, если я в своем php-скрипте заменил или удалил & -char из этой строки, все работает нормально. Так что я подумала, просто убеги чертовой струной. Но это не сработает. предупреждение строки не работает, пока я не удалю & -character.

Что это делает? Является ли sDescription не строкой, когда она выходит из XML-файла? Как я могу решить это?

Ответы [ 4 ]

2 голосов
/ 26 января 2010

Ответ в этом фрагменте:

var aData = request.responseXML...

Вы ожидаете XML. Сам по себе & не является легальным XML. Вам нужно вывести свой результат так:

ПОДДЕРЖКА МОНТАЖА БАКА В СБОРЕ, R & R (LH) (L-ENG)

1 голос
/ 26 января 2010

Очень трудно сказать, не видя ваш выходной скрипт, но первое, что нужно попробовать, это замаскировать амперсанд: &

Тем не менее, можно добавить CDATA к выводу XML:

<data><![CDATA[SUPPORT ASSY-FUEL TANK MOUNTING, R&R (LH) (L-ENG)]]></data>

Ваш синтаксический анализатор XML на стороне клиента должен понимать это без проблем.

0 голосов
/ 26 января 2010

Если вы не можете изменить вывод XML с сервера (это не ваше приложение или какая-либо другая проблема), исправление «взлома» будет:

function htmlizeAmps(s){
  return s.replace(/\x26/g,"&amp;"); //globalreplace "&" (hex 26) with "&amp;"
}
document.getElementById('tempLabourLineDescription').value = htmlizeAmps(sDescription);
0 голосов
/ 26 января 2010

Вы можете избежать амперсанда, используя HTML-экв. &amp;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...