【问题标题】:calling a function with arguement as a string not working调用带有参数的函数作为字符串不起作用
【发布时间】:2013-10-04 18:44:44
【问题描述】:

这是我的代码的一部分,用于在我的页面上显示相册。如果我这样调用函数

<?php   
    for ($key_Number = 0; $key_Number < count($album); $key_Number++) {
    echo '<a href="#" onclick="return false" onmousedown="ajax_json_gallery("gallery1)">Gallery1</a><br>';
    }
    ?>

<script type="text/javascript">ajax_json_gallery('gallery1');</script>

它工作正常。 gallery1 是我服务器上的一个文件,里面有测试照片。如果我这样称呼它

<?php   
    for ($key_Number = 0; $key_Number < count($album); $key_Number++) {
    echo '<a href="#" onclick="return false" onmousedown="ajax_json_gallery($album[$key_Number])">'.$album[$key_Number].'</a><br>';
    }
    ?>

<script type="text/javascript">ajax_json_gallery($album[$key_Number]);</script>

它不起作用。我究竟做错了什么?有任何想法吗? 我需要根据用户传递不同的字符串,所以我需要给它一个变量。 是的,我的数组 $album 确实包含正确的文件夹名称。

这是被调用的函数。

<script type="text/javascript">

function ajax_json_gallery(folder){
    var thumbnailbox = document.getElementById("thumbnailbox");
    var pictureframe = document.getElementById("pictureframe");
    var hr = new XMLHttpRequest();
    hr.open("POST", "json_gallery_data2.php", true);
    hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    hr.onreadystatechange = function() {

        if(hr.readyState == 4 && hr.status == 200) {
            var d = JSON.parse(hr.responseText);
            pictureframe.innerHTML = "<img src='"+d.img1.src+"'>";
            thumbnailbox.innerHTML = "";

            for(var o in d){
                if(d[o].src){
                thumbnailbox.innerHTML += '<div onclick="putinframe(\''+d[o].src+'\')"><img src="'+d[o].src+'"></div>';
                }
            }
        }
    }
hr.send("folder="+folder);
thumbnailbox.innerHTML = "requesting...";
}

function putinframe(src){
    var pictureframe = document.getElementById("pictureframe");
    pictureframe.innerHTML = '<img src="'+src+'">';
}

这里是获取照片的页面 json_gallery_data2.php

<?php

header("Content-Type: application/json");
$folder = $_POST["folder"];
$jsonData = '{';
$dir = $folder."/";
$dirHandle = opendir($dir); 
$i = 0;

while ($file = readdir($dirHandle)) {
    if(!is_dir($file) && preg_match("/.jpg|.gif|.png/i", $file)){
        $i++;
        $src = "$dir$file";
        $jsonData .= '"img'.$i.'":{ "num":"'.$i.'","src":"'.$src.'", "name":"'.$file.'" },';
    }
}
closedir($dirHandle);
$jsonData = chop($jsonData, ",");
$jsonData .= '}';
echo $jsonData;
?>

【问题讨论】:

  • 你可能想试试这个echo '&lt;a href="#" onclick="return false" onmousedown="ajax_json_gallery(' . $album[$key_Number] . ')"&gt;'.$album[$key_Number].'&lt;/a&gt;&lt;br&gt;';
  • 使用一些高级事件注册方法

标签: javascript php arrays function


【解决方案1】:

这是混合服务器端和客户端代码:

ajax_json_gallery($album[$key_Number]);

变量$album$key_number 没有在JavaScript 中定义,所以它不能使用它们。 (我确定当它“不工作”时,它实际上是在 JavaScript 控制台上告诉您这些变量没有定义。)

要从 PHP 发出值,您需要用 &lt;?php ?&gt; 标记将它们括起来。此外,由于它是 JavaScript 中的字符串,因此需要在 JavaScript 中将其括在引号中。像这样的:

ajax_json_gallery('<?php echo $album[$key_Number]; ?>');

【讨论】:

  • 据我所知,他正试图在他的 JS 代码中使用 PHP 变量。此外,没有必要在 echo 语句中使用 &lt;?php ?&gt; 标记。
  • @AmalMurali:我没有在 echo 语句中使用 PHP 标记,但在第二次检查 OP 的代码时,似乎有 two 调用了这个 JavaScript功能。一个在循环内(在 echo 语句内),一个在循环外。循环外的那个需要我所描述的,但我也不认为循环值将在该上下文中可用。 OP 的代码似乎有几处问题。
【解决方案2】:

第一:

$key_Number varibale 在您的服务器上的行:

<script type="text/javascript">ajax_json_gallery($album[$key_Number]);</script>

包含count($album)值,数组中不存在。


第二次:

如果你试图在这一行输出 php 值:

<script type="text/javascript">ajax_json_gallery($album[$key_Number]);</script>

然后尝试将输出包含在&lt;?php ?&gt;标签中:

<script type="text/javascript">ajax_json_gallery('<?php echo $album[$key_Number]; ?>');</script>

第三次:

单引号不允许解析字符串中的变量。

echo '<a href="#" onclick="return false" onmousedown="ajax_json_gallery($album[$key_Number])">'.$album[$key_Number].'</a><br>';

此 ^ 行与您预期的不符。

尝试使用双引号:

echo "<a href=\"#\" onclick=\"return false\" onmousedown=\"ajax_json_gallery({$album[$key_Number]})\">{$album[$key_Number]}</a><br>";

【讨论】:

  • 感谢您的更正,效果很好!我非常感谢完整的代码示例。
  • @JeffK 很高兴为您提供帮助。如果此页面上的任何答案有助于解决您的问题,那么您可以接受它作为解决方案。祝你好运。
  • 在 2 日,我使用 $album[0] 将第一张专辑显示为默认值。再次感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-21
  • 2011-12-11
  • 2011-10-13
  • 2016-10-16
  • 1970-01-01
相关资源
最近更新 更多