2017-06-13 81 views
-1

我已經閱讀了多種答案但沒有任何作品。 我試圖做的是使每個結果從一個PHP foreach循環可點擊,然後將該數據與AJAX發送到其他PHP文件,現在的問題是,無論我做什麼,只有最後的foreach結果總是得到發送,而不是結果我點擊了? (不包括數據庫)如何在每個PHP foreach結果上做一個AJAX點擊文章

迴路存在於功能的functions.php:

public function getForeachResult() 
{ 
    $response = $this->GetObject($parameters); 

     include 'template.php'; 
} 

,處理結果的template.php模板:

<?php 
foreach ($response->Result->List as $key =>$value) { 

    ?><table id="mytable"><tr> 
     <th>ID</th> 
     <th>Date</th> 
     <th>firstname</th> 
     <th>lastname</th> 
    </tr> 

    <?php foreach ($value as $key=>$value) {?> 

      <tr class="myrow"> 
      <td><?php echo $value->ID; ?></td> 
      <td><?php echo date("d-m-Y", strtotime($value->Time)); ?></td> 
      <td><?php echo $value->FullName; ?></td> 
      <td><?php echo $value->LastName; ?></td> 
      </tr> 

    <?php } ?> 

    </table><br /> 

<?php } ?> 

在template.php文件的AJAX腳本所謂的底部:

<script> 
$('.myrow').click(function() { 
    $.ajax({ 
     type: "POST", 
     cache: false, 
     url: "post.php", 
     data: { action: 'goTo', value: <?php echo $value->ID ?>} 
    }).done(function(msg) { 
     $('.Data').html(msg); 
    }); 
}); 

在post.php中,其中DAT是送我只得到foreach循環 post.php中的最後結果:

if($_POST['action'] == 'goTo') { 
    var_dump ($_POST); 
} 

所以我怎樣才能確保AJAX向我點擊的數據?

+0

數據:{行動:「GOTO」,價值:$ (this).find(td:first).text()。trim()} – JYoThI

+0

這裏的問題是你沒有明確標識哪個行被點擊。這就是爲什麼你總是隻能獲取最後一行的原因。你應該添加一個可點擊的按鈕到你的表中,這將是唯一的 – hungrykoala

+1

你在第二個循環中重複使用變量'$ key'和'$ value',這可能會導致意想不到的結果。重命名第二個循環中的變量。 – chiliNUT

回答

0

嘗試:

`<td class="id"><?php echo $value->ID; ?></td> 
<script> 
$('.myrow').click(function() { 
    var id = $(this).find('.id').text(); 
    $.ajax({ 
    type: "POST", 
    cache: false, 
    url: "post.php", 
    data: { action: 'goTo', value: $(this).find(td:first).text().trim()} 
    }).done(function(msg) { 
    $('.Data').html(msg); 
    }); 
});` 

我認爲在數據字段中輸入您的PHP表達只是抱着最後的ID,因爲你在你的HTML環,但在你的AjaxCall的你已經在循環的結束。

編輯:拿了評論

+0

謝謝,這個課程工作正常,這很明顯 – Echatrer

0

您需要使用橫向動態地找到每一行的值上點擊這樣

var clicked_row_id = $(this).find('td:first').text().trim(); 

數據應發送這樣

data: { action: 'goTo', value: clicked_row_id } 

更新1:

$('.myrow').click(function() { 

    var clicked_row_id = $(this).find('td:first').text().trim(); 

    $.ajax({ 
     type: "POST", 
     cache: false, 
     url: "post.php", 
     data: { action: 'goTo', value:clicked_row_id } 
    }).done(function(msg) { 
     $('.Data').html(msg); 
    }); 
}); 

在foreach循環結束時,您只會在$value->ID;中獲得最後一次迭代值。所以當你在js中迴應它。所以它只會回顯最後一個值。

0

因此,爲了解釋爲什麼,我認爲你在你的腦海裏弄到了一些小東西,這會造成混亂。您的PHP文件在Ajax中沒有發送任何內容到另一個PHP文件。您的PHP文件構建一個HTML頁面,並且此頁面中的Javascript使用Ajax發送數據。

記住這一點,即在PHP中構建將來執行的未來JS代碼。如果動態變量必須在Ajax調用或數據發送期間被檢索,那麼JS將會執行它,而不是PHP。

所以像其他人的答案建議,你必須在JS中檢索id,而不是PHP。

+0

感謝您的解釋,我的JS不是最好的,但將來肯定會記住這一點 – Echatrer

0

你唯一需要做的就是點擊的ID就這樣

$('.myrow').click(function() { 
    var id = $(this).children("td.first").text(); 
    $.ajax({ 
     type: "POST", 
     cache: false, 
     url: "post.php", 
     data: { action: 'goTo', value: id} 
    }).done(function(msg) { 
     $('.Data').html(msg); 
    }); 

它會正常工作,不需要改變你的表HTML

相關問題