jQuery没有看到使用php echo显示的字符串

时间:2016-04-20 15:05:05

标签: php jquery echo getelementbyid document-ready

我的php页面看起来像这样(在脚本上面加载了jQuery)。当span id =" description"中的文本时,它正常工作(#desc- *的css从display:none变为display:inline)是普通文本,但是当使用php echo函数时(它从URL中检索$ itemdesc的字符串值;值可以是"产品A"或"产品B" ;)要显示字符串,代码不起作用。我认为ready函数会让PHP / DOM加载并且它会起作用,但是没有。

编辑:我删除了php短标签,但没有帮助。 (echo函数在有或没有短标记的情况下工作。)

编辑#2:我现在正在使用@Alex Andrei的js代码。但问题似乎是由于使用_GET(我的知识在这里是有限的)。作为测试,我将<?php $itemdesc=$_GET["itemdesc"]; >替换为<?php $itemdesc = 'Product A';>,然后回复它,并且javascript工作。

编辑3:解决了。由于空白字符,字符串不匹配100%。

<?php $itemdesc=$_GET["itemdesc"]; ?>  //can be "Product A" or "Product B"

<html>

<style>
 #desc-a, #desc-b {display: none;}
</style>

You purchased: <span id="description"><?php echo $itemdesc ?></span> and 
    <span id="desc-a">you'll get it in 1 day.</span>
    <span id="desc-b">you'll get it in 5 days.</span>

<script>
    $(document).ready(function () {
    debugger;
    var c = document.getElementById("description").innerHTML;

    if (document.getElementById("description").innerHTML == "Product A") {
        document.getElementById("desc-a").style.display = "inline";

    if (document.getElementById("description").innerHTML == "Product B") {
        document.getElementById("desc-b").style.display = "inline";
    }
    });
</script>

5 个答案:

答案 0 :(得分:1)

您不需要jQuery

见下面的例子

<?php

$itemdesc = trim($_GET["itemdesc"]);

?>

<script type="text/javascript">

var desc = document.getElementById("description");

switch(true){

  case desc.innerHTML == 'Product A':
    document.getElementById("desc-a").style.display = "inline";
    break;

  case desc.innerHTML == 'Product B':
    document.getElementById("desc-b").style.display = "inline";
    break;

}
</script>

您的if块也未正确打开/关闭。

更新:
我在trim周围添加了GET,以取消任何前导或尾随空格,例如换行符或空格。

你应该考虑@SurrealDreams在他的回答中提出的方法,因为它消除了许多安全问题。

答案 1 :(得分:1)

这是一种更简单的方法来处理此页面:

<?php
$itemdesc=$_GET["itemdesc"];

if ($itemsdesc == "Product A") {
    $delay = "1 day"
} elseif ($itemsdesc == "Product B") {
    $delay = "5 days"
} else {
    $delay = "several days"
}
?>  

You purchased: <span id="description"><?php echo $itemdesc ?></span> and 
   you'll get it in <?php echo $delay ?>.

根本没有JavaScript。但请不要将$ _GET值直接插入页面。这使您的页面可以通过恶意链接进行攻击。

答案 2 :(得分:0)

尝试让您的脚本正常工作我发现了短标记<? ?>

哪里不行,但如果你包含jquery

你的javascript工作正常

当然。

所以你要么在你的php.ini

中启用短标签short_open_tag=On

或使用<?php ?>

答案 3 :(得分:0)

$(document).ready(function () {
   var c = document.getElementById("description").innerHTML;

   if (c == "Product A") {
       document.getElementById("desc-a").style.display = "none";
   }  <---  //this was missing btw
   if (c == "Product B") {
      document.getElementById("desc-b").style.display = "inline";
   }
});

答案 4 :(得分:0)

您可能有竞争条件。 innerHTML值可以在document.ready完成后呈现。

您可以设置间隔。我使用doTimeout jQuery插件作为间隔来检查c是否有任何值。如果没有,请运行检查,直到有值。

例如:

var folder = "/img/krokus2016/"
    $.ajax({
        url: folder
    }).done(function(response) { 
        console.log(response);
    }).fail(function(xhr, ajaxOptions, thrownError) {
        console.log('Error = '+thrownError+' , Error Status = '+xhr.status+' , ajaxOptions = '+ajaxOptions);
    });

此间隔每100毫秒运行一次。一旦条件返回true,它就会执行DOM操作。

也许不是最优雅的方式。只是一个想法。