2015-12-24 5 views
-1

Я ищу решение проблемы невозможности сохранения/применения изменений в документе .html, если в JavaScript используется document.createElement("div");. Я хочу сохранить изменения, внесенные в документ, и «перезаписать» исходный документ .html.Javascript: динамический контент для конкретного пользователя на странице HTML

Будущие возможности (их можно игнорировать): Удаление этих элементов, а также сохранение этих изменений, чтобы вернуть его обратно в исходное состояние.

EDIT: -------------- Я не прояснил это, извините!

Этот код предназначен для EMBED Множественные YOUTUBE видео на одной странице; Я ХОТЕЛ НЕСКОЛЬКО ПОМОЩЬ, ЧТО-ТО, ЧТО-НИБЫ OVERWRITE ОРИГИНАЛ .HTML ДОКУМЕНТ. ПОЭТОМУ ЗАГРУЖЕНИЕ ЭТОГО НОВОГО СОДЕРЖАНИЯ EACH ВРЕМЯ КТО-ТО ОТКРЫВАЕТ СТРАНИЦУ.

Вот мой код:

<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <title>Test</title> 
 
    <script src="https://code.jquery.com/jquery-1.10.2.js"></script> 
 
</head> 
 

 
<body> 
 
    <div id="container"> 
 
    <div id="header" align="center">Home</div> 
 
    <div align="center"> 
 
     <button onclick="myFunction()">Button</button> 
 
    </div> 
 
    <div id="parentElement" align="center"> 
 
    </div> 
 
    <script> 
 
     function myFunction() { 
 
     var parentElement = document.getElementById('parentElement'); 
 
     var theFirstChild = parentElement.firstChild; 
 
     var newElement = document.createElement("div"); 
 
     parentElement.insertBefore(newElement, theFirstChild); 
 
     newElement.setAttribute("id", "newElement"); 
 
     var embed = prompt("Please enter your YouTube Embed Link"); 
 

 
     if (embed != null) { 
 
      document.getElementById("newElement").innerHTML = embed; 
 
     } 
 
     } 
 
    </script> 
 

 
</body> 
 

 
</html>

+0

Как вы пытаетесь сохранить его? Я сомневаюсь, что браузер может сделать это в прямом JS; вы можете представить себе кошмар безопасности, если HTML-страница может писать на локальный диск по своему усмотрению. Плагин мог бы это сделать, если бы вы написали плагин. –

+0

В любом случае. Я прочитал некоторые вещи об использовании AJAX, PHP и MySQL. Будет ли это лучшим путем? – Tsotmix

+0

Вы можете отправить обратно innerHTML на сервер, конечно. Это странный способ сделать динамический контент. Было бы более обычным отправить обратно список YT vids и сохранить его. Затем выполните запрос страницы для списка и создайте контент из этого списка. –

ответ

0

Я думаю, что вы спрашиваете, как поставить динамическое содержание в статической веб-страницы. Это не моя область знаний, но я могу дать вам очертания того, как делать то, что вы пытаетесь сделать. Это архитектура. Вы должны сами заполнить некоторые детали реализации, но я постараюсь дать вам четкое представление о том, что вы будете искать на каждом этапе пути.

Предложения для улучшения от реальных веб-парней будут с нетерпением охвачены. Если на SO уже есть ответ, который проделывает noob через дизайн тривиального одностраничного веб-приложения AJAX/JSON, я не могу его найти. Должен быть один.

Это намного сложнее, чем ваша оригинальная идея, но переписывание веб-страницы не является отличной идеей: вы пишете произвольные нули и сообщения от незнакомых людей к файлу на вашем сервере. Вам нужен один HTML-файл для каждого пользователя, если вы храните свои данные в файлах HTML. Как вы ему правы? Что, если вы измените макет после того, как у вас будет 500 пользователей? Вы должны написать сценарий для изменения текста из 500 файлов HTML. На практике это просто ужас.

Что вы нащупываете, это динамический контент через AJAJ, который мы по-прежнему вызываем по историческим причинам (до появления обработки с ЧПУ, фигурные скобки были сложны для массового производства в экономическом отношении, и поэтому веб-службы, обычно используемые pointy вместо скобок).

Сначала напишите веб-страницу, чтобы обслуживать личный контент пользователя. Он также сохранит обновления. Может также использовать PHP. Эта страница не является веб-страницей; вместо HTML, он возвращает JSON текст с content-type из application/json. Пользователь может добавить текст POST в формат JSON. Эта «страница» - это веб-сервис.

При получении запроса страница веб-сервиса с указанием имени пользователя (и соответствующей безопасности) будет извлекать список видео YouTube пользователя из MySQL и возвращать его вызывающему абоненту как JSON.

Пока что содержание, идущее на и с этой страницы веб-сервиса, довольно простое. Просто список URL-адресов. Давайте сделаем его объектом, у которого есть один член, и что один член будет массивом объектов, содержащих информацию о видео YouTube, выбранных пользователем. На данный момент у каждого есть URL-адрес, но мы можем захотеть добавить более подробные сведения позже, поэтому мы не будем просто создавать массив строк с открытым URL-адресом. На верхнем уровне мы также сможем добавлять другие типы контента вместе с «YouTubeVideos», если есть такая необходимость - например, вам понадобится имя пользователя и токен безопасности.

{ 
    "YouTubeVideos": [ 
     { 
      "url": "http://youtu.be/LKJDFKLJDF" 
     }, 
     { 
      "url": "http://youtu.be/87sdfd234" 
     } 
    ] 
} 

На странице HTML, код JS будет первым запрашивать данные пользователя с этого веб-сервиса в onLoad. Вы сделаете это, используя XMLHttpRequest. Вы будете использовать функцию JavaScript JSON.parse, чтобы превратить текст ответа в объект JS.

Так что напишите функцию requestUserYTContent или что-то еще, и вызовите это из onLoad. Это упрощенная: Там нет проверки, обработки исключений и т.д.

// Empty default instance to start out. 
var ytInfo = { "YouTubeVideos" : [] }; 

function requestUserYTContent() { 
    // ... 
    // Do stuff with XMLHttpRequest to get the JSON for this user from 
    // the web service. 
    // ... 

    ytInfo = JSON.parse(http_request.responseText); 

    console.log('Got ' + ytInfo.YouTubeVideo.length + ' videos'); 

    // Once you've got that JSON object, you can loop through the 
    // videos and do stuff with their urls. We'll stick that loop in 
    // another function so we can re-use it in cases where the list 
    // changes for reasons other than a web service call. 

    var ytDiv = document.getElementById('ytContent'); 

    ytDiv.innerHTML = 
     generateVidListHTML(ytInfo.YouTubeVideos); 
} 

function generateVidListHTML(vids) { 
    var newHTML = ''; 
    for (var i = 0; i < vids.length; ++i) { 
     var url = vids.YouTubeVideos[i].url; 
     // ...generate HTML to display this video, and append to 
     // newHTML 
    } 
    return newHTML; 
} 

Так мы продолжаем, что ytInfo вокруг в глобальной переменной. Когда пользователь добавляет в список или удаляет его, измените список, заново создайте HTML с generateVidListHTML(), вставьте HTML-код на страницу, как указано выше, а затем опубликуйте вновь измененный список как JSON на веб-сервере для обновления содержимое пользователя в базе данных mySQL.

Вы получите данные POST на веб-службу с помощью XMLHttpRequest. Вот пример. Конечно, вы будете использовать другой тип контента.

https://stackoverflow.com/a/9713078/424129

В JavaScript на веб-странице, преобразовывая живой JavaScript объект обратно в JSON легко: https://stackoverflow.com/a/4162803/424129

Для простоты, вы можете также просто пройти один и тот же формат JSON назад и вперед.

Когда вы отправляете JSON обратно в веб-службу, он также должен проанализировать его. Я не знаю, как разобрать JSON в PHP, но я знаю, что кто-то, кто делает:

https://www.google.com/search?q=how+to+parse+json+in+PHP

+0

Это, безусловно, много информации; и это, кажется, идет по правильному пути того, что я хотел. Поэтому я поставил это вместе, и если у меня возникнут вопросы по пути; Я спрошу. Большое вам спасибо за большой вклад. Я ценю это. На данный момент я отмечу ваш ответ, если кто-то захочет попробовать это. – Tsotmix

+0

@Tsotmix Да, это определенно большой проект, чем вы, вероятно, представляли себе, когда сели, чтобы заняться этим. Во что бы то ни стало, задайте любые возникающие вопросы. С завтрашнего дня я буду на дороге в течение нескольких дней, посещая семью, но я заберу свой телефон. –

+0

Нет другого способа сказать это, это уже правда. Но я согласен и благодарю вас. Наслаждайтесь временем со своей семьей и веселым Рождеством/Счастливой Ханукой, в зависимости от того, что вы празднуете. :) – Tsotmix

0

<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <title>Test</title> 
 
    <script src="https://code.jquery.com/jquery-1.10.2.js"></script> 
 
</head> 
 

 
<body> 
 
    <div id="container"> 
 
    <div id="header" align="center">Home</div> 
 
    <div align="center"> 
 
     <button onclick="myFunction()">Button</button> 
 
    </div> 
 
    <div id="parentElement" align="center"> 
 
    <div id="newElement" style="display: hidden"></div> 
 
    </div> 
 
    <script> 
 
     function myFunction() { 
 
     var embed = prompt("Please enter your YouTube Embed Link"); 
 

 
     if (embed != null) { 
 
      document.getElementById("newElement").innerHTML = embed; 
 
      $('#newElement').css('display','inline'); 
 
     } 
 
     } 
 
    </script> 
 

 
</body> 
 

 
</html>

просто вынимая родителя - отношения ребенка элемент в JavaScript коде и поместить новый элемент DIV в html с отображением: нет атрибута стиля. Затем в функции щелчка просто сделайте его видимым.

Cheers!

+0

Это опрятная концепция, но я могу только вставить одно видео, и если я попробую другой, он перезапишет это встраивание, которое я только что ввел. Это не тот результат, который я искал. – Tsotmix

0

Потребовалось некоторое время, чтобы понять, что ваше требование инфата еще не выяснено. Но из вашего кода я понимаю, что вы пытаетесь получить текст из приглашения и сначала хотите его отобразить на своей странице. Но это не работает, поскольку вы не можете его выполнить. document.getElementById("newElement").innerHTML Скорее всего, используя innerHTML вы можете проверить textContent. Вот небольшие изменения в функции

 if (embed != null) { 
      newElement.textContent = embed; 
     } 

WORKING COPY

+0

Мой код работает для меня, я просто хочу, чтобы «перезаписать» существующий документ index.html, чтобы содержимое зависало каждый раз при загрузке страницы без загрузки HTML по умолчанию. Извините, что потратил ваше время. – Tsotmix

+0

HTML - это статический контент, вам нужно использовать jsp/jstl и обновлять его содержимое на странице load.You не может ожидать js для перезаписи html! – brk

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