Javascript 调用参数为字符串的函数不起作用

Javascript 调用参数为字符串的函数不起作用,javascript,php,arrays,function,Javascript,Php,Arrays,Function,这是在我的页面上显示相册的代码的一部分。如果我这样调用函数 <?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>'; }

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

<?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>
<?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>

阿贾克斯画廊(“画廊1”);
它很好用。gallery1是我服务器上的一个文件,里面有测试照片。如果我这样称呼它

<?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>
<?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>

ajax_json_图库($album[$key_Number]);
它不起作用。我做错了什么?有什么想法吗? 我需要根据用户传递不同的字符串,所以我需要给它一个变量。 是的,我的array$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+'">';
}

函数ajax\u json\u库(文件夹){
var thumbnailbox=document.getElementById(“thumbnailbox”);
var pictureframe=document.getElementById(“pictureframe”);
var hr=新的XMLHttpRequest();
打开(“POST”,“json\u gallery\u data2.php”,true);
hr.setRequestHeader(“内容类型”、“应用程序/x-www-form-urlencoded”);
hr.onreadystatechange=函数(){
如果(hr.readyState==4&&hr.status==200){
var d=JSON.parse(hr.responseText);
pictureframe.innerHTML=“”;
thumbnailbox.innerHTML=“”;
用于(变量o在d中){
if(d[o].src){
thumbnailbox.innerHTML+='';
}
}
}
}
hr.send(“文件夹=”+文件夹);
thumbnailbox.innerHTML=“正在请求…”;
}
函数putinframe(src){
var pictureframe=document.getElementById(“pictureframe”);
pictureframe.innerHTML='';
}
下面是获取照片的页面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;
?>

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

ajax_json_gallery($album[$key_Number]);
变量
$album
$key\u number
未在JavaScript中定义,因此无法使用它们。(我确信当它“不工作”时,它实际上是在JavaScript控制台上告诉您这些变量没有定义。)

要从PHP发出值,需要用
标记将它们包围起来。此外,由于它在JavaScript中是一个字符串,因此需要在JavaScript中用引号括起来。大概是这样的:

ajax_json_gallery('<?php echo $album[$key_Number]; ?>');
ajax\ujson\ugallery(“”);
1st:

$key\u Number
varibale在您的服务器上的行中:

<script type="text/javascript">ajax_json_gallery($album[$key_Number]);</script>
然后尝试将输出包含在
标记中:

<script type="text/javascript">ajax_json_gallery('<?php echo $album[$key_Number]; ?>');</script>
ajax\ujson\ugallery(“”);

3rd:

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

echo '<a href="#" onclick="return false" onmousedown="ajax_json_gallery($album[$key_Number])">'.$album[$key_Number].'</a><br>';
echo'
';
这条线没有达到您的预期

尝试使用双引号:

echo "<a href=\"#\" onclick=\"return false\" onmousedown=\"ajax_json_gallery({$album[$key_Number]})\">{$album[$key_Number]}</a><br>";
echo“
”;
您可能想试试这个
echo'
使用一些高级事件注册方法据我所知,她试图在他的JS代码中使用PHP变量。另外,在
echo
语句中不必使用
标记。@AmalMurali:我没有在echo语句中使用PHP标记,不过在第二次检查OP的代码时,似乎有两次调用此JavaScript函数。一个在循环内(在echo语句内),一个在循环外。循环之外的那个需要我描述的,但是我也不认为循环值在那个上下文中是可用的。OP的代码似乎有几处错误。感谢您的更正,它工作得很好!我真的很感激完整的代码示例。@JeffK很乐意帮忙。如果此页面上的任何OnPower有助于解决您的问题,那么您可以接受它作为解决方案。祝你好运。在2日,我使用$album[0]将第一张相册显示为默认值。再次感谢