2013-10-25 30 views
0

我需要从选择框中获取一个值,并将其用于页面上的一个PHP函数。根据所选内容在下拉列表中显示文件名

我有index.php与常规选择下拉菜单。选择框中的值和选项是文件夹的名称。当我选择一个文件夹时,我想通过jquery/ajax获取该值,而不更新整个页面。然后,我将在页面上的另一个php函数中使用该值,并列出该文件夹中找到的文件名。

我也有一个script.js文件。我至今是:

$(document).ready(function() { 
    $("#select-folder").change(function() { 
    // Get selected value and send to index.php 
    }); 
}); 

我是新来的jQuery和AJAX,所以我不太知道如何在不更新整个页面发送此值,或者如果它甚至有可能?也许我需要在index.php页面上包含JavaScript作为脚本标记?

更新增加新的代码

这是我的index.php文件,并努力获得的文件夹名称将其发送到file.php

<script> 
    $(document).ready(function() { 
     $("#select-folder").change(function() { 
     var value = $(this).val(); 
    console.log(value); 
    $.ajax({ 
    url: "/files.php", 
    data: "site=" + value, 
    type: 'POST', 
    success: function(var1, var2) { 
     console.log(var1 + var2); 
    } 
    }) 
    }); 
}); 
</script> 

然后,在file.php我得到文件夹名称并循环浏览文件夹内的所有文件。 但是,当这个代码I输出:

echo '<p>' . $file . '</p>'; 

它输出在控制台日志中,而不是在index.php

问题解决

我很多搜索,我要补充的后实现代码通过ajax转换为div,或者由于页面加载而不显示。

我加了这段代码的javascript的成功部分来自上面:

$('#show-files').html(var1); 

感谢大家的帮助。

+0

我不确定我是否按照这个问题。我认为你想说的是你要做DOM操作来根据下拉菜单的价值改变页面的一部分?而这个变化的来源将来自一个PHP脚本,它将发送下拉菜单数据? –

+0

我想根据下拉的值更改页面的一部分,是的。而且,是的,下拉数据中的值将被添加到可在文件夹中查找文件的PHP函数中。 –

回答

0

例如。 我们有一个文件夹(树)结构:在你

./images 
    |--/foto1 
    |---- 1-1.jpg 
    |---- 1-2.jpg 
    |---- -13.jpg 
    |--/foto2 
    |---- 2-1.jpg 
    |---- 2-2.jpg 
    |---- 2-3.jpg 
./index.php 

选择指数/ foto1文件夹选择与价值 “图像/ foto1”

$(document).ready(function() { 
    $("#select-folder").change(function() { 
     var folderName = $(this).val(); // get a folder to display. 
     $.ajax(
      url: "index.php", 
      type: "POST", 
      data: {'folder':folderName}, 
      dataType: "json" 
      success: function(data){ 
       console && console.log(data); 
       // data variable will contains array of files 
       $("#result").html(''); 
       for(i=0,c=data.length;i<c;i++) 
        $("#result").append( data[i]+'<br>'); 
      } 
     ); 

    }); 
}); 

index.php文件包含下面的代码元素:

<?php 
$files = array(); 
if(isset($_POST['folder']) && file_exists($_POST['folder']) && is_dir($_POST['folder'])){ 
    if ($handle = opendir($_POST['folder'])) { 
     while (false !== ($entry = readdir($handle))) 
      array_push($files, $entry); 
    } 
} 
echo json_encode($files); 

此外,您还需要添加安全检查输入(目录检查)。 您可以使用此realpath(),dirname()和其他Filesystem functions

+0

谢谢你的回应。这与我最终解决问题的方式非常接近,所以我会将其标记为正确答案。 –

+0

不用客气 – dododo

1
$.post('/index.php', { selectedId: this.value }, function(resultHTML){ 
    $('#containerId').html(resultHTML); 
}); 

此代码发送选定的值来index.php页返回的HTML的一部分,我们把这个部分某处页上(在这种情况下在元件ID为数据筒)

+0

当我使用代码时,它创建了我index.php上的所有内容的副本 我已经尝试在我自己的代码中使用它,这些代码是我在上面和外面编写的代码。 –

+0

你想调用一个只输出你想要的页面部分的PHP文件。这样做的两种方法是将它作为一个单独的文件,或者在index.php脚本中包含一些代码,以便只输出整个页面(如果它没有从$ .post中调用)。我不知道你的页面布局,所以我不能真正推荐一种或另一种。 –

+0

@DanGoodspeed我已经改变了我的代码,所以现在它发送一个Ajax请求到另一个PHP文件Files.php。在files.php中,我得到文件夹名称,循环访问该文件夹中的所有文件。它运作良好,但是当我写'回声'

'。 $文件。 '

''它只会在控制台日志中输出。我如何让它显示在我的index.php页面上?我需要做更多的Ajax功能吗? –

相关问题