2014-06-26 89 views
0

我对此的研究相当令人沮丧,但我不明白为什么这不起作用。从PHP调用JavaScript函数不工作

当我的索引页加载它应该从数据库通过php加载数据,然后将数据回显到JavaScript的格式和工作与该数据,这工作正常,如果我在HTML的正文上放置一个onload事件然后将使用加载到js可变数据中的数据。这工作,但我不喜欢每次加载页面时使用onload事件。

这里是PHP代码是在index.php文件的顶部:

if ($confirmation){ 

    $data = $membership->get_data("assump"); 

    echo '<script type="text/javascript">var data = '. json_encode($data) .'; 
     var dataLoaded = ' . json_encode(false) . '; loadData();</script>'; 

} 

的loadData()函数:

<script type="text/javascript"> 

    function loadData(){ 

     // Do stuff with the data 

    } 
</script> 

的js函数loadData()中,还写入在结束标签正文之前放在同一个php文件中。我应该用PHP构建脚本吗?或将脚本放置在其他地方?或者是否可以调用这个js函数?

+0

什么是你的PHP代码的解析HTML输出? – tjati

回答

2

好像你在两个单独的脚本块中有两段代码。这是行不通的。

为了使起重功能起作用,它们需要在同一个标​​签中(需要在那里定义悬挂的功能)。

下面是一个更详细的解答一个类似的问题:(每个请求)

浏览器一次读取JS的一个块,仅在相同的所以吊装作品Why is my javascript function not being called in my div?


UPDATE块(或者如果函数是在之前定义的,当然)。在你的情况,可能是最简单的解决办法是分配的代码的PHP变量,然后只是呼应它在同一个脚本块:

PHP

$js = ''; 

if ($confirmation){ 

    $data = $membership->get_data("assump"); 

    $js .= 'var data = '. json_encode($data) .'; 
     var dataLoaded = ' . json_encode(false) . '; loadData();'; 

} 

HTML

<script type="text/javascript"> 

    <?= $js ?> // or <?php echo $js; ?> 

    function loadData(){ 

     // Do stuff with the data 

    } 
</script> 

请注意,这允许您通过PHP注入几行/部分JS,这就是为什么我使用$js .= ...而不是仅仅使用$js = ...

请注意,这将不会与外部.js文件一起工作,除非您先让PHP解析它们(因为您的JS是在正常解析的HTML文件中,所以在代码中无需担心)。

+0

它适用于我:[JSBin示例](http://jsbin.com/vinupoti/2) – blex

+0

@blex我没有看到在您的示例中函数提升,而是一个定义的变量。 Thx为downvote顺便说一句。 – Shomz

+0

@blex下面是我正在谈论的一个恰当的例子:http://jsbin.com/vinupoti/9/ – Shomz