Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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
使用PHP中创建的变量从PHP调用Javascript函数_Javascript_Php_Function - Fatal编程技术网

使用PHP中创建的变量从PHP调用Javascript函数

使用PHP中创建的变量从PHP调用Javascript函数,javascript,php,function,Javascript,Php,Function,我在comment_insert.js文件中有一个javascript函数: function comment_insert(data,ul_id) { var t = ''; t += '<li class="comment-holder" id="_' + data.comment_id + '">'; t += '<div class="user-img">'; t += '<img src

我在comment_insert.js文件中有一个javascript函数:

  function comment_insert(data,ul_id) {

        var t = '';
        t += '<li class="comment-holder" id="_' + data.comment_id + '">';
        t += '<div class="user-img">';
        t += '<img src="' + data.profile_img + '" class="user-img-pic" />';
        t += '</div>';
        t += '<div class="comment-body">';
        t += '<h3 class="username-field" >' + data.Username + '</h3>';
        t += '<div class="comment-text">' + data.comment + '</div>';
        t += '</div>';
        t += '<div class="comment-buttons-holder">';
        t += '<ul>';
        t += '<li class="delete-btn">[x]</li>';
        t += '</ul>';
        t += '</div>';
        t += '</li>';

        $('#' + ul_id).prepend(t);
    }

调用的函数与comment_insert.js中的函数相同,它接受2个输入(数据和ul_id)。这些都是在display.php中创建的,然后我想执行该函数。

假设php代码与Javascript位于同一文件中,并用于前端输出到浏览器,则可以执行以下操作:

<?php
$smthng = new stdClass();
        $smthng->comment_id = 24;
        $smthng->Userid = 1;
        $smthng->comment = "Hard coded comments";
        $smthng->Username = "Sagar_username"; 
        //$smthng->profile_img = "images/Setting-icon.png";


        $data =  json_encode($smthng);
                $ul_id = "ul218";
?>
<script type="text/javascript">
    comment_insert(jQuery.parseJSON(<?php echo $data ?>), <?php echo $ul_id ?>);
</script>

注释插入(jQuery.parseJSON(),);

但是,如果该文件不在向浏览器生成输出的文件中,则无法执行Javascript服务器端

要在PHP中执行Javascript,则需要安装

安装后,您应该通过file_get_contents将comment_insert.js解析为PHP变量,并以如下方式执行它:

<?php

$v8 = new V8Js();

/* Get you js file's content */
$JS = file_get_contents("PATH/TO/JS-FILE/comment_insert.js");

try {
  $v8->executeString($JS, 'basic.js');
} catch (V8JsException $e) {
  var_dump($e);
}

?>
  function comment_insert(data,ul_id) {

    var t = '';
    t += '<li class="comment-holder" id="_' + data.comment_id + '">';
    t += '<div class="user-img">';
    t += '<img src="' + data.profile_img + '" class="user-img-pic" />';
    t += '</div>';
    t += '<div class="comment-body">';
    t += '<h3 class="username-field" >' + data.Username + '</h3>';
    t += '<div class="comment-text">' + data.comment + '</div>';
    t += '</div>';
    t += '<div class="comment-buttons-holder">';
    t += '<ul>';
    t += '<li class="delete-btn">[x]</li>';
    t += '</ul>';
    t += '</div>';
    t += '</li>';

    //$('#' + ul_id).prepend(t);
    elem = document.getElementById(ul_id);
    elem.insertBefore(t);  
}

PHP在服务器上运行,Javascript在客户端运行。你不能从一个呼叫另一个。充其量,您可以从客户端->服务器调用AJAX调用php代码并获取其输出。您能为我提供解决此问题的AJAX调用吗?我已经厌倦了从短语“变量创建的可能重复”开始的问题,函数调用将在php代码中的相同for{}循环中执行。因此,我无法结束我的php代码并启动一个标记来调用函数。然后我建议您参考原始问题上的注释,Javascript无法在服务器端执行,除非您执行类似于Madhipie建议的操作(使用V8js扩展),您可以在php块之间添加脚本块,甚至是在for循环中。只需结束php
?>
编写脚本块,然后再次打开

  function comment_insert(data,ul_id) {

    var t = '';
    t += '<li class="comment-holder" id="_' + data.comment_id + '">';
    t += '<div class="user-img">';
    t += '<img src="' + data.profile_img + '" class="user-img-pic" />';
    t += '</div>';
    t += '<div class="comment-body">';
    t += '<h3 class="username-field" >' + data.Username + '</h3>';
    t += '<div class="comment-text">' + data.comment + '</div>';
    t += '</div>';
    t += '<div class="comment-buttons-holder">';
    t += '<ul>';
    t += '<li class="delete-btn">[x]</li>';
    t += '</ul>';
    t += '</div>';
    t += '</li>';

    //$('#' + ul_id).prepend(t);
    elem = document.getElementById(ul_id);
    elem.insertBefore(t);  
}