iT邦幫忙

1

按鈕按下後透過ajax傳回值

先從資料庫將資料全部撈出來做成一個資料表

每一筆資料後面有一個按鈕

程式碼大部分如下

table部分:

<table width="100%" border="1" cellspacing="0" cellpadding="2" align="center" id="list_table"> 

<?php
$get_item_sql = "select * from table_name where row_status !='deleted'";
while($item_row = mysql_fetch_array($get_item_result)){
?>
    <td><?php echo $item_row['item_id'];?></td>
                
    <td><?php echo $item_row['item_name'];?></td>
                
    <td><?php echo $item_row['serial_number'];?></td>
                
    <td><?php echo $item_row['accessories'];?></td>
                
    <td><?php echo $item_row['custodian'];?></td>
    
    <button id="receive_button" name="receive_button" style="color:#F00;" type="button" value="yes" onclick="already_receive()">接收</button>
</table>  

<?php } ?>
$("#receive_button").click(function(){
			   
    $("#receive_button").hide();
										
});

ajax的部分

function already_receive(){
		
    $.ajax({
					 
        url: 'tool_receive.php',
				  
        type: 'POST',
				  
        data : {
				  
            receive_status:'yes'
						
        },
				  
        async: false,
				  
        success: function (data) {
					  
            alert("接收成功");
					  
        }
	  
    });
			
}

想更新的那筆資料,我是不是還需要將判斷的值也一併傳過去

tool_receive.php的部分

$receive_status = $_POST['receive_status'][$i];

$item_id = $_POST['item_id'][$i];      //用這個去判斷對應到哪一筆資料

mysql_query("update table_name set receive_status='".$receive_status."' where item_id='".$item_id."'"); 

目前卡在我怎麼把從資料庫撈出來對應到正確的item_id也傳去後端

感覺我表達的也不夠清楚

但需要的動作是按下後就會觸發事件並傳回值給資料庫

更新那筆資料的狀態(receive_status)

ajax裡的data少了item_id,不太確定該給他指定什麼樣的值

麻煩大大們幫忙了 謝謝!

看更多先前的討論...收起先前的討論...
dragonH iT邦超人 5 級 ‧ 2020-03-04 15:39:58 檢舉
>ajax裡的data少了item_id,不太確定該給他指定什麼樣的值

就是 item_id 的值
不好意思,能麻煩您解釋的更詳細嗎?
最簡單的做法就是 你在 already_receive() 加入 item_id 當參數
ajax data 設置 item_id : item_id
這樣不就能判斷了
然後妳按下接收就隱藏按鈕 如果接收失敗呢
dragonH iT邦超人 5 級 ‧ 2020-03-04 16:02:53 檢舉
>不好意思,能麻煩您解釋的更詳細嗎?

我不行

但你可以

sql statement需要 item_id

那就帶給他

不能的原因是什麼呢
to listennn08
>按下接收就隱藏按鈕 如果接收失敗呢
error: function(error) {$("#receive_button").show();},
這樣嗎?

>already_receive() 加入 item_id 當參數
var item_id =".$item_id['item_id']."; (??
這邊就是我卡住的地方



to dragonH
>不能的原因是?
對程式的理解還不夠

可能我自己鑽進了胡同
對於該給他的"值"是甚麼我不太確定
龍大給你範例了
你會用 echo 把值送到前端
稍微轉一下就會瞭解了
>error: function(error) {$("#receive_button").show();},
你可以搬到 success 在隱藏 不是更好嗎

1 個回答

1
dragonH
iT邦超人 5 級 ‧ 2020-03-04 16:40:30
最佳解答

例如

<button
    id = "receive_button"
    name = "receive_button"
    style = "color:#F00;"
    type = "button"
    value = "yes"
    onclick = "already_receive(<?php echo $item_row['item_id'];?>)"
>接收</button>

script

function already_receive(itemId){
// itemId 就可傳到後端
    $.ajax({
        url: 'tool_receive.php',
        type: 'POST',
        data : {
            receive_status:'yes',
            itemId,
        },
        async: false,
        success: function (data) {
            alert("接收成功");
        }
    });
}

php

$receive_status = $_POST['itemId'][$i];

這樣應該就 ok

沒實測過

看更多先前的回應...收起先前的回應...

我一直在想 $receive_status = $_POST['itemId'][$i];
為什麼要有 [$i]

dragonH iT邦超人 5 級 ‧ 2020-03-04 17:24:30 檢舉

可能是很多個吧

我是抄他的XD

為什麼要有 [$i]
那是原本的php
直接複製過來修改的,忘了現在我只需要一個

感謝大大給的提示
原本是想利用傳遞的方式
http://blog.wingzero.tw/2012/04/javascript-php-value.html
但看了一下Network 後端並沒有收到
又想$item_id = $item_row['item_id'];然後already_receive(item_id)
但跟龍大的比起來感覺多此一舉
於是改採用龍大的方法
但檢查的時候一直Uncaught ReferenceError: xxx is not defined at HTMLInputElement.onclick
沒詳細看,一直搞不懂為甚麼沒定義
原來是參數不是數字需要多個單引號
看來還是太淺ˊ_>ˋ
很感謝兩位大大的幫助!

dragonH iT邦超人 5 級 ‧ 2020-03-05 10:16:44 檢舉

/images/emoticon/emoticon12.gif

柯柯 iT邦新手 5 級 ‧ 2020-03-05 17:18:56 檢舉
<button 
    class="receive_button"
    style = "color:#F00;"
    type = "button"
    value = "yes"
    data-id = "<?=$item_row['item_id'];?>"
>接收</button>

$('.receive_button').on('click',function(){
    $.ajax({
        url: 'tool_receive.php',
        type: 'POST',
        data : {
            receive_status:'yes',
            item : this.setdata.id, // $(this).data(id)
        },
        async: false,
        success: function (data) {
            alert("接收成功");
        }
    });
}

我在想怎不用data傳ID 哈哈哈 這樣應該也可以

另外提醒一下 按鈕如果有多個 按鈕的id名稱不要重複喔 不然可能會出事 我常常被id搞到

我要發表回答

立即登入回答