Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法从JS调用PHP函数_Javascript_Php_Html_Innerhtml - Fatal编程技术网

Javascript 无法从JS调用PHP函数

Javascript 无法从JS调用PHP函数,javascript,php,html,innerhtml,Javascript,Php,Html,Innerhtml,我试图在HTML文档的JS块中运行PHP函数。 该函数包括PHP、HTML和JS 该函数包括一个循环,直到最后一次循环运行正常,它将打印以下内容: );document.getElementByIdcode.innerHTML+=sayThis 错误消息显示: 未捕获的语法错误:意外的标识符 该函数称为load_offers,它从数据库检索数据,并在列表对象中显示数据 它会做它应该做的,直到我添加以下内容: <script type="text/javascript"> var sa

我试图在HTML文档的JS块中运行PHP函数。 该函数包括PHP、HTML和JS

该函数包括一个循环,直到最后一次循环运行正常,它将打印以下内容:

);document.getElementByIdcode.innerHTML+=sayThis

错误消息显示: 未捕获的语法错误:意外的标识符

该函数称为load_offers,它从数据库检索数据,并在列表对象中显示数据

它会做它应该做的,直到我添加以下内容:

<script type="text/javascript">
var sayThis = "<?php load_offers(); ?>";
document.getElementById("code").innerHTML += sayThis;
</script>
该函数需要被调用,这样当用户向下滚动到页面末尾时,它会加载6个以上的列表对象,而不是一次加载所有对象。这就是为什么我需要JS来调用这个函数

以下是函数:

    function load_offers(){
//Gets variables needed to connect to mysql.
    global $servername;
    global $username;
    global $password;
    global $dbname;
    global $fetched;
    global $amount;

    $conn = new mysqli($servername, $username, $password, $dbname);

//Creates a query that loads a limited number of offers.
     $query = "SELECT ID, TITLE, IMAGELINK, DATE_ADDED, OLD_PRICE, NEW_PRICE, SAVE_PERCENT FROM erbjudanden WHERE APPROVED = 'Y' ORDER BY DATE_ADDED DESC 
    LIMIT $fetched, $amount";

    $result = $conn->query($query);

//Declares arrays.
    $all_offers = array();
    $titles = array();
    $imagelinks = array();
    $dates = array();
    $old_prices = array();
    $new_prices = array();
    $percents = array();
    $link = array();
    $i = 0;
    $bad_chars = array("'", "!", ",", "\"", "(", ")", "[", "]", "#", "&", "+", "=", "@", "$", "%", "|" );

//Gets data from row into arrays.
     while($row = $result->fetch_assoc()){
        $all_offers[$i] = $row['ID'];
        $titles[$i] = $row['TITLE'];
        $imagelinks[$i] = $row['IMAGELINK'];
        $dates[$i] = $row['DATE_ADDED'];
        $old_prices[$i] = $row['OLD_PRICE'];
        $new_prices[$i] = $row['NEW_PRICE'];
        $percents[$i] = $row['SAVE_PERCENT'];

//Creates a link with only numbers, lowercase letters and - instead of spaces.
        $link[$i] = $row['TITLE'];
        $link[$i] = strtolower($link[$i]);
        $link[$i] = str_replace(" ", "-", $link[$i]);
    foreach($bad_chars as $bad){
    $link[$i] = str_replace($bad, "", $link[$i]);
    }
    $link[$i] = str_replace("--", "-", $link[$i]);
    $link[$i] = $link[$i] . "-" . $all_offers[$i];
        $i++;

       }


//Writes out data as listobjects.
    $a = 0;
    foreach ($all_offers as $offer)
    {
    $aID = $fetched + $a;
    echo'<a href="'.$link[$a].'">
            <li class = "listobjekt">
            <h4  align = "center" >' . $titles[$a] . '</h4>
            <img src="' . $imagelinks[$a] . '" class = "tellme" id = "tiny'. $aID .'">
            <table class = "pri">
            <tr><td width="50">Förr:</td><td id ="for"> ' . $old_prices[$a] . ' :-</td></tr>
            <tr><td>Nu:</td><td id = "bu">' . $new_prices[$a] . ' :-</td></tr>
            <tr><td >Spara:</td><td id = "spara">' . $percents[$a] . ' %</td></tr>
            </table>
            </li></a>

//Makes image fit it's container and align correctly.

    <script type="text/javascript">
    var file = document.getElementById("tiny'.$aID.'");

    if(file.height < file.width){

    file.style.width="180px";
    padding = file.width - file.height;
    padding = padding / 2;
    padding = padding+"px";
    file.style.marginTop=padding;
    file.style.marginBottom=padding;

    }
    else{
    file.style.height="180px";

    padding = file.height - file.width;
    padding = padding / 2;
    padding = padding+"px";
    file.style.marginLeft=padding;
    file.style.marginRight=padding;
    }
    </script>
    ';


    $a++;
    }
    }
希望我足够清楚。

在PHP文档中运行JS可能更简单 为了假设工作,它必须位于脚本标记之间的文档体中

注意:我在我的机器上测试了这个,它可以工作。文件扩展名为.php

编辑:显然这不是最佳实践,最好像这样运行PHP:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title></title>
</head>
<body>
<script>
  var test = <?= json_encode('test') ?>;
  console.log(test);
</script>
</body>
</html>

在评论中为菲尔提供道具,帮助我解决这个问题。

首先,使用PHP调整图像

其次,确保javascript变量sayithis在一行上。Javascript不支持带单引号的多行


我在你的电脑上测试了这个,它可以正常工作!:

不打印任何东西,你是说你得到了一个空白的白色屏幕?或者只是那个元素没有得到文本?如果是前者,则在某些地方出现PHP错误,需要检查服务器日志或打开显示_errors@Phill,我有一个.js文件。我将其链接到html文件,如下所示:,我还尝试在块内使用html进行链接。注意php不会默认解析js文件,我不明白你的意思。当您可以直接给出值时,为什么要“echo”一个字符串。@B.Tibell您的问题在这里得到了回答。将PHP输出包含到JS中最安全的方法是var test=interest,我想知道更多。请详细说明!json_encode将为json正确编码输出,而json恰好是JavaScript中需要包含的内容。这也意味着您不必担心输出中的引号。此外,您可以在JS文件中运行PHP,这并不常见~是的。请求的资源的文件扩展名实际上并不重要。您只需要配置web服务器,通过模块、FPM等通过PHP解释器运行文件。请参阅我直接链接的答案
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title></title>
</head>
<body>
<script>
  var test = <?= json_encode('test') ?>;
  console.log(test);
</script>
</body>
</html>