Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.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文件中的PHP echo_Javascript_Php_Jquery_Echo - Fatal编程技术网

Javascript文件中的PHP echo

Javascript文件中的PHP echo,javascript,php,jquery,echo,Javascript,Php,Jquery,Echo,因此,问题如下: 我想用PHP动态地回显javascript。此echo需要是另一个javascript文件,或者与另一个javascript文件一起使用,在单击ID时,echo的值用于调用函数 但是,当加载页面并添加document.getElementById时,当单击元素时,它们是正确的,控制台会告诉我fplaying是未定义的 PHP文件 这很简单。试试这个 echo " <script> "; echo "document.getElementById('$source

因此,问题如下: 我想用PHP动态地回显javascript。此echo需要是另一个javascript文件,或者与另一个javascript文件一起使用,在单击ID时,echo的值用于调用函数

但是,当加载页面并添加document.getElementById时,当单击元素时,它们是正确的,控制台会告诉我fplaying是未定义的

PHP文件


这很简单。试试这个

echo " <script> ";
  echo "document.getElementById('$source').onclick = fplaying ";
echo "</script>";
我不这么认为

 document.getElementById('$source').onclick = fplaying 
将在未定义fplaying时找到该函数

尝试:

而不是

function fplaying () {
    alert ("test");
}

好吧,根据我对你问题的理解: 您的php创建了一个html文件,其中有一个id=值$source的元素,您希望它在单击时播放声音

如果您想像以前一样创建一段javascript,可以尝试: 回响 而$row=mysql\u fetch\u array$result{

    $source = $row ['audiosource'];

    echo "
    document.getElementById('$source').onclick = fplaying()
    ";
}
echo "</script>"

这会使浏览器将脚本识别为javascript并执行它。请确保在将包含您所引用元素的页面部分打印到html之后,将脚本打印到html。否则,脚本可能会在将页面的相关部分加载到浏览器之前运行。

我不确定是否可以使用这可能不是你想要的答案。但是不推荐长评论,所以我只是作为答案发布

这是可以做到的,我刚开始使用ASP.Net进行Web开发时就做过,但这仍然表明架构不正确。您使用的JavaScript是客户端脚本,因此应该附带适当的AJAX结构来完成这项工作。服务器只负责根据请求发送适当的响应,而不是指定页面在客户端的行为方式

像这样的事情-

var play = function(){
    ...//code to play
};

$.ajax({
   url: ..//url to php page
   type: ...
   ...,
   success: function(data){
      ...//data responded by php page
      play();
   },
   error: function(){
   }
});

我在jQuery中使用了语法。还有其他库。

就像在通过PHP打印的JS中一样,只为页面上其他地方存在的具有该ID的元素设置onclick事件。因此,更好的方法是在该可单击项中定义一个类

<button id='<?php echo $source; ?>' class='click-me'>Click Me</button>

显然,您的fplaying声明被延迟,此外,它仅在本地定义

$(function() {
    console.log( "ready!" );
    function fplaying () {
         alert ("test");
    }
});
在这种情况下,外部函数一完成,fplaying就被删除。请尝试将fplaying绑定到您的窗口

$(function() {
    console.log( "ready!" );
    window.fplaying = function() {
         alert ("test");
    };
});
为了进一步说明这一点:

function a() {
    function fplaying() {
        alert("Hi");
    }
    fplaying();
}
a();
将显示警报框

function a() {
    function fplaying() {
        alert("Hi");
    }
}
a();
fplaying();
不会显示fplaying的警报框仅在a的范围内可见,因此它与您的情况一样未定义

现在将显示警报框fplaying声明为对象窗口的方法,或多或少也充当全局作用域


因为它是使用$function{…}延迟的;确保在加载文档之前未运行PHP呈现的调用代码。但根据上下文中的备用信息,这似乎不是问题。

假设您有一个集合,来自db查询:$collection,由具有唯一id的关联数组组成

现在,您显然要显示这些对象,并要求用户对它们执行一些操作,即fplay函数。您必须做的是回显您需要的项目的任何部分,并以某种方式在html中传递项目id

因此,构建html的php部分如下所示:

 echo "<ul>";
 $id = $item['id'];
 foreach ($collection as $item){
   echo '<li><a onclick="return fplaying(' + $id + ')" href="#" class="btn"></li>';
 }
 echo "</ul>";

在PhpTry中,转换代码并使用类似AJAX的东西不是正确的方法。您没有指定问题/困难是什么。您应该了解javascript中的AJAX调用,您现在的做法是错误的。PHP与您的问题无关。发布呈现的HTML和javascript。另外,如果您使用的是jQuery,为什么要使用y你在做document.getElementById'$source'.onclick=fplaying?Javascript是客户端语言,而PHP是服务器端,使用它是为了同样的目的!:先生,这是正确的方法吗?:Javascript是客户端语言,而PHP是服务器端,使用它是为了同样的目的!:@PratikJoshi个人不会使用这种方法:我是只是试图帮助op调试他的code@andrew正如您所说,它是未定义的,但在按照您的建议执行时,它并没有说未定义,但函数仍然没有执行。不过,感谢您的回答!@NealVDV可能是由于顺序,即document.getElementById…在定义函数之前被发送到浏览器。如果我是您,请返回jQuery bu use$。在上,则将来加载的元素将绑定到function@andrew您建议的声明函数的方法从语义角度来看是相同的。在这两种情况下,都会有一个名为fplaying of type function的局部变量。先生,这种方法正确吗?:Javascript是客户端当PHP是服务器端时,使用它的目的是相同的!:@Sreenath问题是,当单击带有echo'd ID的元素时,控制台会说fplaying是undefined@NealVDV你检查过我的答案了吗?它包含了你想解决的问题的答案
长官,这是正确的方法吗Javascript是客户端语言,PHP是服务器端语言,使用它也可以达到同样的目的这是一个非常好的方法。您可以使用PHP进行服务器端处理,并根据仅在服务器端可用的信息生成特定于客户端的javascript代码。也就是说,基于这里的信息,这可能不是最好的方法,我个人会制作一个更通用的javascript,将必要的信息添加到属性中的html元素中,并让javascript检索它。然而,提问者应该比我有更多的信息来决定最好的方法。@HolySquirrel即使我把它放在包含函数的js文件的脚本标记之后,它仍然在控制台中显示为未定义。谢谢你的回复!好的,还可以查看cepharum对javascript的回答。在浏览器或类似程序中检查生成的带有view source的页面,并确保在这段javascript之前定义了函数fplaying。我还对我的答案做了一点修改,因为我认为我犯了一个错误。也许我在输出PHP文件时出错了,目前只是在一口井中,如果你不提供更多关于这些Javascript源如何相互作用的信息,就没有机会进一步帮助你。尝试提供HTML文件的框架,集成PHP响应的JS代码和声明fplaying的JS代码。。。尽管如此,在函数内部的布局方式只会使它在该函数内部可见。
$(function() {
    console.log( "ready!" );
    window.fplaying = function() {
         alert ("test");
    };
});
function a() {
    function fplaying() {
        alert("Hi");
    }
    fplaying();
}
a();
function a() {
    function fplaying() {
        alert("Hi");
    }
}
a();
fplaying();
function a() {
    window.fplaying = function() {
        alert("Hi");
    };
}
a();
fplaying();
 echo "<ul>";
 $id = $item['id'];
 foreach ($collection as $item){
   echo '<li><a onclick="return fplaying(' + $id + ')" href="#" class="btn"></li>';
 }
 echo "</ul>";
function fplaying (id) {
  alert ("your id is " + id);
}
$source = $row ['audiosource'];
echo '<div id="'.$source['id'].'" class="sourceDiv">'.$source['name'].'</div>';
$(document).ready(function(){
    $('.sourceDiv').click(function(){alert($(this).attr('id'))});

});