Невозможно загрузить PHP-файл во внутренний HTML-раздел, созданный динамически с помощью javascript

#php #javascript #file #dynamic #innerhtml

#php #javascript #файл #динамический #innerhtml

Вопрос:

Я могу загрузить файл .php в div, просто используя <?php include("file.php") ?> файл, в котором могут быть php, javascript, html и обычный текст, и он по-прежнему отлично работает.

Я НЕ могу загрузить файл в Div, который я создал динамически с помощью javascript, если в файле есть теги сценария.

ПРИМЕЧАНИЕ: я обновляю код по мере продвижения

index.php

Первый раздел отлично работает и загружает test.php файл без каких-либо проблем.

 <div id="phpDiv"
    style="
    position:absolute; 
    top: 50px; 
    left: 50px;
    height: 200;
    width: 300;
    background-color: #CCCCCC;"> 
        This is the phpDiv  <br>
        <?php include("test.php"); ?>
</div>
  

Второй динамически созданный раздел не будет загружать файл, если в нем есть теги сценария

 <script>
    var javascriptDiv = document.createElement('div');
    javascriptDiv.setAttribute('id', 'javascriptDiv');
    javascriptDiv.style.position = 'absolute';  
    javascriptDiv.style.top = 350;
    javascriptDiv.style.left = 50;
    javascriptDiv.style.height = 200;
    javascriptDiv.style.width = 300;
    javascriptDiv.style.background = '#CCCCCC'; //so we can see that the DIV was created

    <?php  
            //must have http:// in it to load php stuff
            //will not load files with <script> tags
            $file = file_get_contents('http://127.0.0.1/Debug/test.php');

            //Trim the string and remove new lines.
            $file = trim($file);
            $file = str_replace("n", "", $file);
            $file = str_replace("r", "", $file);

            echo "javascriptDiv.innerHTML = "This is the javascriptDiv <br>";  ";  
            echo "javascriptDiv.innerHTML  = '". $file ."';";
    ?>

    document.body.appendChild(javascriptDiv); //Display the Window
</script>
  

test.php <-файл, который я пытаюсь загрузить

 <?php echo "php works <br>"; ?>
<script> alert('javascript works'); </script>
<a> html works </a><br><br>

and extra spaces and plain text work fine as well 
  

Комментарии:

1. Что делает test.php как выглядит? Вы избегаете ' в PHP? Все ли в файле в одной строке, без разрывов строк, или вы разбиваете и объединяете это содержимое для JS?

2. Если браузер видит что-то вроде этого: jsfiddle.net/W3k7P и это не работает, потому что вы не можете распределить переменные по двум строкам таким образом.

3. Содержимое вашего DIV должно выглядеть примерно так: jsfiddle.net/W3k7P/1 Обратите внимание на конкатенацию строк для каждой строки, причем каждая строка заключена в кавычки.

4. как выглядит ваш визуализированный исходный код? Что говорит консоль Javascript? Оба эти вопроса было бы очень полезно знать :]

5. Хорошо, все выглядит лучше. Теперь единственная проблема, с которой я сталкиваюсь, — это динамическая загрузка файлов Div с тегами script в них. Он загрузит все остальное.

Ответ №1:

Я бы сказал, что это не работает, потому что вы используете одинарные кавычки в свой оператор single quotes, устанавливающий ваш innerHTML.

 <?php echo "php works <br>"; ?>
<script> alert("javascript works"); </script>
<a> html works </a><br><br>
  

Редактировать:

Вы можете попытаться автоматически удалить новые строки следующим образом:

 // Create a stream
$opts = array(
  'http'=>array(
    'method'=>"GET",
    'header'=>"Accept-language: enrn"
  )
);

$context = stream_context_create($opts);

// Open the file using the HTTP headers set above
$file = file_get_contents('test.php', false, $context);
$file = str_replace( "rn", "", $file );
  

поместите $file в ваш innerHTML

Комментарии:

1. если я удалю все, кроме первой строки из test.php , затем он загрузится.

2. Также я не знаю, возможно ли использовать javascript в инструкции innerHTML 🙂

3. Вы можете использовать HTML во внутреннем назначении HTML . Похоже, это проблема многострочного цитирования.

4. Он должен проверить это, сделав это без новых строк, тогда я могу рассказать ему, как удалить новые строки 🙂

5. Пожалуйста, не угадывайте, каков ответ. Если вы хотите попытаться сузить проблему, используйте комментарии под вопросом. :)

Ответ №2:

Попробуйте просмотреть этот код . Я успешно справился с этим. Создайте свой index.php закодируйте и поместите файл Jquery в этот каталог.Загрузите его отсюда http://jquery.com/download /.

 <html lang="en">
<head>
<meta charset="utf-8">
<title>load demo</title>
<style>
body{ font-size: 12px; font-family: Arial; }
</style>
<script src="jquery.js"></script>
</head>
<body>
<b>Successful Response (should be blank):</b>
<div id="success"></div>
<b>Error Response:</b>
<div id="error"></div>
<script>
var browser=navigator.userAgent;
//if (browser.lastIndexOf("Chrome")>=5)
{
alert("ok");
$("#success").load("index.php", function(response, status, xhr) {
if (status == "error") {
var msg = "Sorry but there was an error: ";
$("#error").html(msg   xhr.status   " "   xhr.statusText);
}
});
}
</script>
</body>
</html>