未运行通过AJAX从PHP返回的Javascript代码


Echoed Javascript Code from PHP Via AJAX Not Running

我的代码旨在通过AJAX使用Google Books API获取输入书籍的作者。如果未输入任何内容,则打印"空"。它实际做的是在输入一本书时打印出Javascript代码。当没有输入任何内容时,它会按原样打印"空"。我如何修改我的代码以执行回显的Javascript,从而获得输入书籍的作者?

只是为了看看,我用echo "<script>document.getElementById('txtBox').innerHTML = 'Hello';</script>";替换了回声部分。它还打印出javascript代码,所以我认为这与使用API无关。

getAuthor.html

<!DOCTYPE html>
<html>  
  <body>
	<!-- Input -->
    <div class="form">
      <form onsubmit="makeRequest(); return false">
        <input type="text" id="inputText" name="inputText">
        <input type="submit">
      </form>
    </div>
	
    <br>
    
    <!-- Output -->
    <div class="txtBox">
      <textarea  id="txtBox">
      </textarea>
    </div>
    
    <!-- AJAX to create output using jEcho.php file-->
    <script>
        function makeRequest() {
            httpRequest = new XMLHttpRequest();
            console.log(httpRequest.responseText);
            httpRequest.onreadystatechange = function() {               
                document.getElementById("txtBox").innerHTML = httpRequest.responseText;
            };
            httpRequest.open("POST", "jEcho.php", true);
            httpRequest.setRequestHeader("Content-type","application/x-www-form-urlencoded");
            httpRequest.send("inputText=" + document.getElementById("inputText").value);
        }
    </script>
  </body>
</html>

jEcho.php

<?php
$input = $_POST["inputText"];
if ($input == "") {
    echo "Empty";
} else {
    // used to parse
    // e.g. The Rosie Project -> The+Rosie+Project
    $temp = str_replace(" ", "+", $input);    
    
    // create appropiate source
    $scriptSource = "https://www.googleapis.com/books/v1/volumes?q=$temp&callback=handleResponse";
    
    echo "<script>
           function handleResponse(response) {
              var item = response.items[0];
              document.getElementById('txtBox').innerHTML = item.volumeInfo.authors[0];
            }
          </script>
          <script src='$scriptSource'></script>";
}
?>

链接

呼应PHP的Javascript:

如何从PHP调用JavaScript函数?

从PHP 中回显javascript

谷歌图书API:

https://developers.google.com/books/docs/v1/getting_started

https://developers.google.com/books/docs/v1/using

<script>元素仅在首次加载页面时运行。稍后通过分配给元素的.innerHTML、使用document.createElement()创建或以其他方式创建的脚本元素都不会执行。

如果你想让PHP脚本发回要评估的代码,你必须直接这样做,例如:

httpRequest.onreadystatechange = function() {               
    eval(httpRequest.responseText);
};

(并从响应中删除<script>标签。)

尝试在jEcho.php文件中设置头(未测试)

header('Content-Type: application/javascript'); 

我不允许发表评论,所以:

我不确定是什么原因导致的,但可以在handleResponse函数之前调用<script src='$scriptSource'></script>";吗。我不太确定是什么原因造成的,目前,这是我最好的主意。

此外,您是否可以不只是在代码中有这样的url:(jEcho.php)

<?php
$input = $_POST["inputText"];
if ($input == "") {
    echo "Empty";
} else {
    // used to parse
    // e.g. The Rosie Project -> The+Rosie+Project
    $temp = str_replace(" ", "+", $input);    
    // create appropiate source
    //$scriptSource = "https://www.googleapis.com/books/v1/volumes?q=$temp&callback=handleResponse";
    echo "
          <script src='https://www.googleapis.com/books/v1/volumes?q=$temp&callback=handleResponse'></script>
          <script>
              function handleResponse(response) {
                 var item = response.items[0];
                 document.getElementById('txtBox').innerHTML = item.volumeInfo.authors[0];
              }
          </script>";
}
?>