2017-05-25 82 views
0

這是我第一次在這裏發帖,但我似乎無法找到我有問題的答案。我已經使用了多年的堆棧,但這是我第一次看到無法找到答案。如果我應該做一些不同的事情,請隨時讓我知道。

我動態地填充目錄中存在的文件名稱的按鈕。我需要使用jquery和ajax將點擊的按鈕名稱發送給我的控制器。我使用下面的代碼來做到這一點:

$currentDir = getcwd(); 
       $files = scandir($currentDir); 
       $count = 0; 
       foreach ($files as $name) { 
        if(preg_match("/^sma\w*/", $name)){ 
         $workingFiles = substr($name, strpos($name, "_") + 1); 
         $availableActions = explode(".", $workingFiles); 
         $class_action = $availableActions[0]; 
         $buttonName = $class_action; 
         $count ++; 
         ?> 
         <button id="<?php echo $class_action;?>" class="actionButtons"><? echo $buttonName; ?></button> 
          <script> 
           $(document).ready(function() { 
            $("#<?php echo $class_action;?>").click(function(){ 

             var class_action = <?php echo $class_action;?>  
             $.ajax({ url: url + '?action=GetStatus&action=Execute', 
              type: 'POST', 
              data: JSON.stringify({action: "GetStatus", action: "Execute", actionItem: class_action}), 
              contentType: 'application/json; charset=utf-8', 
              success: function(output) { 
               if(output){ 
                console.log(output); 


               } 
               else{ 
                console.log("Nothing returned"); 

               } 
              }, 
               error: function() { 
                console.log("error in the execute call"); 

               } 
             }); 
            }); 
           }); 
         </script> 
         <? 
        }       
       }      

與控制器,看起來像這樣:

if(isset($_GET['action'])){ 
$action = $_GET["action"]; 
switch($action){ 
    case "GetStatus":  
    _setContent(); 
    break; 
    case "Execute": 
    if(isset($_POST['data'])){ 
     $data = json_decode($_POST['data']); 
     echo $data; 
    } 
    break; 

想法?任何反饋將不勝感激!

+0

爲什麼你使用'$ _GET [ '行動']':

相反,你可以使用這個下面的代碼?事實上,你爲什麼試圖將它發佈並附加到URL?你有沒有看過瀏覽器調試工具?請求中的表單數據是什麼?是否如您期望的那樣傳遞正確的信息? – Styphon

+0

偉大的問題! @Styphon我正在使用$ _GET ['action']來激發正確的情況,因爲它正在查看URL參數操作。從那裏我需要看$ _POST ['data']來發送這些信息。在查看調試工具時,我似乎無法找到數據發佈的位置。看起來只有URL參數被髮布。 –

回答

0

爲什麼你在循環內有$(document).ready?當你張貼

$(document).ready(function() { 
 
    $(".actionButtons").click(function() { 
 
    var class_action = $(this).attr('id') 
 
    $.ajax({ 
 
     url: url + '?action=GetStatus&action=Execute', 
 
     type: 'POST', 
 
     data: JSON.stringify({ 
 
     action: "GetStatus", 
 
     action: "Execute", 
 
     actionItem: class_action 
 
     }), 
 
     contentType: 'application/json; charset=utf-8', 
 
     success: function(output) { 
 
     if (output) { 
 
      console.log(output); 
 
     } else { 
 
      console.log("Nothing returned"); 
 

 
     } 
 
     }, 
 
     error: function() { 
 
     console.log("error in the execute call"); 
 

 
     } 
 
    }); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<?php 
 
    $currentDir = getcwd(); 
 
    $files = scandir($currentDir); 
 
    $count = 0; 
 
    foreach ($files as $name) { 
 
    if(preg_match("/^sma\w*/", $name)){ 
 
     $workingFiles = substr($name, strpos($name, "_") + 1); 
 
     $availableActions = explode(".", $workingFiles); 
 
     $class_action = $availableActions[0]; 
 
     $buttonName = $class_action; 
 
     $count ++; 
 
     echo "<button id="$class_action" class='actionButtons'>" . $buttonName. "</button>"; 
 
    }       
 
    } 
 
?>

+0

這就是它沒有填充數據的原因。我在循環中刪除了$(document).ready,現在數據正在通過。現在我需要弄清楚爲什麼它返回actionItem: {jQuery18397275251907154883:6}但這是一個不同的話題,我會一起研究。感謝你們!什麼救命啊! –

+0

不客氣! –

+1

很酷。瘋狂數字的原因是由於var不是由引號中的php設置的。我有var class_action = <?php echo $ class_action;?>而不是var class_action =「<?php echo $ class_action;?>」。涼。所有固定。你們好棒! –