LINUX.ORG.RU

JavaScript, JSON

 


0

1

Есть форум, который использует JSON. При нажатии кнопки Contact Us в ответ прилетает форма для ответа (текстом):
//========
<form>
<input type=«submit»>
<script type=«text/javascript» src=«path»></script>
</form>
//========
Но проблема в том, что в этой форме есть js, который не вставляется в код в виде js
Вопрос - можно ли как-то в в тексте переделать <script>, чтоб он после загрузки еще работал?


Но проблема в том, что в этой форме есть js, который не вставляется в код в виде js

Объясни, я не понял. В каком виде он вставляется?

mopsene ★★★
()
Ответ на: комментарий от spdooh

Ни в каком. в страницу вставляеся:

<form>
<input type=«submit»>
</form>

если ни в каком, то не вставляется это в страницу. Если вставляется - то все таки тебе придется рассказать как.

BaBL ★★★★★
()
Ответ на: комментарий от BaBL

В ответ на нажатие кнопки прилетает ответ:
{ «templateHtml»:«<form>
<input type=„submit“>
<script type=„text/javascript“ src=„path“></script>
</form>»}

При этом, когда смотрю страницу firebug'ом - там только

<form>
<input type=«submit»>
<script type=«text/javascript» src=«path»></script>
</form>

То есть часть текста (конкретно <script type=«text/javascript» src=«path»></script>) при отрисовке протерялась.

spdooh
() автор топика
Ответ на: комментарий от spdooh

во втором случае имелось в виду
<form>
<input type=«submit»>
</form>

spdooh
() автор топика
Ответ на: комментарий от spdooh

В ответ на нажатие кнопки прилетает ответ:

Ну, прилетел к тебе ответ, и что? он никуда не вставляется. Он висит в какой-то переменной transport.templateHtml и нигде не отображается и не показывается.

Если не хочешь обстоятельно отвечать на вопросы - не жди и помощи. У тебя спросили, как оно вставляется, ты до сих пор не ответил.

BaBL ★★★★★
()
Ответ на: комментарий от Eddy_Em

http://www.quizful.net/post/dynamic-javascript-loading :

<script type="text/javascript">

function dhtmlLoadScript(url)
{
   var e = document.createElement("script");
   e.src = url;
   e.type="text/javascript";
   document.getElementsByTagName("head")[0].appendChild(e); 
}

onload = function()
{ 
   dhtmlLoadScript("dhtml_way.js");
}

</script>
А еще можно, например, в iframe ответ на запрос откидывать

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Ну так-то да. И в нормальном варианте я б не стал так делать.
Но форум-то уже есть и написан и использует такой метод.
А мне надо на форму повесить js(

spdooh
() автор топика
Ответ на: комментарий от BaBL

Вопрос понял, ответа не знаю.
Знаю только что чтото прилетело в ответ, и что-то отобразилось.
А посередине - вот прям совсем не представляю, что происходит(

spdooh
() автор топика
Ответ на: комментарий от Eddy_Em

Во! кажется то, что надо!
iframe - заработало бы, но чтоб iframe'ом делать - это полфорума надо будет перекорячить.

spdooh
() автор топика
Ответ на: комментарий от spdooh

чтоб iframe'ом делать - это полфорума надо будет перекорячить

Зачем? Если есть общий JS, достаточно внести изменения. А iframe генерировать динамически.

Но, по идее, и так должно заработать.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Спасибо, решил!
Основное неочевидное было - то, что javascript, который идет в ответе JSON - выполняется и от того его не видно.

spdooh
() автор топика
Ответ на: комментарий от spdooh

Основное неочевидное было - то, что javascript, который идет в ответе JSON - выполняется и от того его не видно.

Ты сломал мой мозг (-__-" )

Boba_Fett
()

P.S. ТС, не дай бог тебе кому-нибудь ТЗ писать, это будет полный п.

Boba_Fett
()
Ответ на: комментарий от Boba_Fett

Извини за мозг.
Проблема - если странице послать вот такой вот ответ -
{ «templateHtml»:«<form>
<input type=„submit“>
<script type=„text/javascript“>doSomething</script>
</form>»}
то скрипт <script type=«text/javascript»>doSomething</script> выполнится еще до вставки текста в страницу.
Поэтому пришлось этот doSomething обернуть таймером, чтоб он выполнялся только тогда, когда будет существовать элемент, к которому он должен быть привязан.

Я тоже надеюсь, что мне не придется писать тебе ТЗ.
ЗЫ -а вот эдди - понял)

spdooh
() автор топика
Ответ на: комментарий от spdooh

А время таймера ты откуда взял? Вешай обработчик на load или DOMContentLoaded. А вообще, кривая какая-то архитектура, переписать всё это нормально нельзя?

Kalashnikov ★★★
()
Ответ на: комментарий от spdooh

а вот эдди - понял)

Ну, значит он тот еще телепат :)

то скрипт <script type=«text/javascript»>doSomething</script> выполнится еще до вставки текста в страницу.

JSON «выполняться» не может. PERIOD. Надо его нормально обрабатывать, а не через одно место.

Boba_Fett
()
Ответ на: комментарий от Kalashnikov

А время таймера ты откуда взял?

Ну так зациклил - пока не появится элемент - setTimeout.

А вообще, кривая какая-то архитектура, переписать всё это нормально нельзя?

Можно наверняка, но это к разработчикам xenforo

spdooh
() автор топика
Ответ на: комментарий от Boba_Fett

Ну, значит он тот еще телепат :)

Это да. Наверное помогает, пока в отпуске.

JSON «выполняться» не может. PERIOD.

JSON - не может, это же формат!
А вот скрипт, таким образом переданный - вполне может.

Надо его нормально обрабатывать, а не через одно место.

Ну уж какие обработчики есть.

spdooh
() автор топика
Ответ на: комментарий от spdooh

Ну так зациклил - пока не появится элемент - setTimeout

Ещё быдлокодистей. Кстати, есть setInterval.

это к разработчикам xenforo

По-моему это ты не правильно им пользуешься, не надо в шаблоны код запихивать.

Kalashnikov ★★★
()
Ответ на: комментарий от Kalashnikov

Ещё быдлокодистей. Кстати, есть setInterval.

Можно и через него - суть та же

По-моему это ты не правильно им пользуешься, не надо в шаблоны код запихивать.

так не в сам шаблон. если в ответ на нажатие кнопки прилетает только форма (а на странице, где есть форма должен быть мой js - то только туда и засовывать).

spdooh
() автор топика
Ответ на: комментарий от firestarter

Да, обязательно.
Так как оно уже так делается (это свободный плагин, так что просить всех, кто ставит переделывать формат передачи - не вариант)

spdooh
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.