2016-07-13 3 views
0

Я пытаюсь получить данные из php в свой javascript. Я использую raw XMLHttpRequest. Он отлично работает, но у меня возникает ошибка анализатора при попытке вернуть <a> ссылки, содержащие onclick событие с аргументом. Например:php/javascript/HTML-парсер с пробелом

В PHP у меня есть:

echo "<a href='#' onclick=myfunction('$data')>$data</a><br>";

В JavaScript У меня есть

xhr.onreadystatechange = function(){ 

if(xhr.readyState == 4 && xhr.status == 200){ 
        document.getElementById("some_id").innerHTML=xhr.responseText; 
} 

} 

НО хромированная консоль Google показывает, что это в HTML элемента «some_id

<a href="#" onclick="myfunction('John" Doe')>John Doe</a>

Вместо 'John Doe' у нас есть 'John" Doe'. я понял, что белое пространство между именами отвечает за это (то есть без каких-либо пробелов, то результат был бы 'John Doe'

Как я могу это исправить? (Как двойные кавычки в JavaScript закрыть нажмите т.е. щелчки это вызывает ошибку)

+0

Не уверен, что я понимаю вопрос, каков ожидаемый результат и что такое ток? – Epodax

+0

http://stackoverflow.com/questions/3752769/how-to-escape-double-quotes-in-title-attribute – epascarello

+1

@Epodax двойная кавычка внутри JavaScript закрыла клик ... OP хочет знать, как почини это. – epascarello

ответ

-1

попробовать: json_encode()

echo "<a href='#' onclick=myfunction('".json_encode($data)."')>$data</a><br>"; 
+0

, как я уже сказал, ** пробел ** между Джоном и Доу, кажется, путает парсеры. С json_ecode я получаю 'John Doe' –

0

Ну, давайте посмотрим на то, что визуализируется как:

<a onclick=myfunction('John Doe')> 

В HTML-парсер, который имеет атрибут onclick, имеет значение myfunction('John, а затем есть второй атрибут Doe').

Вы должны обеспечить правильный HTML синтаксис тоже:

<a onclick="myfunction('John Doe')"> 
     ^     ^

На самом деле, вам нужно обеспечить правильный синтаксис Javascript, а затем убедитесь, что Javascript код не нарушает HTML синтаксис:

printf('<a onclick="%s">', htmlspecialchars(sprintf('myfunction(%s)', json_encode($data)))); 
+0

Тип эзотерического в качестве объяснения (на мой взгляд). если не так много спросить, как это применимо к моему коду? –

+0

Это очень применимо к вашему коду ...!? Вы должны заменить PHP 'echo' на версию' printf', чтобы убедиться, что вы создаете правильный синтаксис, который должен решить вашу проблему. – deceze

+0

hmm Так вот что я написал 'printf ('', htmlspecialchars (sprintf ('myfunction (% s)', json_encode ($ data))));' но не только не была поднята ни одна ошибка, НО ничего нет напечатан на странице. Все пустое, как будто код не был запущен –

-1

Ах да. Тогда это может быть правильно

echo "<a href='#' onclick=\"myfunction('".urlencode($data)."')\" >$data</a> 
+0

Синтаксис Javascript! = Кодировка URL. Неправильный механизм escape/encoding для неправильного языка. – deceze

+0

Привет! Вместо того, чтобы публиковать два отдельных ответа, вы можете отредактировать первый, чтобы включить любые новые данные. – Epodax

+0

Ха-ха не знает, но это устранило проблему, заменив пустое место знаком +. Итак, теперь я получаю «Джон + Доу». Тем не менее это не совсем то, что я искал, так как он меняет исходные данные. Спасибо за помощь. –

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