2013-10-25 72 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功能嗎? –

相關問題