原本的問題不是這個,後來發現我想法走岔了,所以改了題目,因此回答看起來有點雞同鴨講,別在意......
如標題,alert告訴我JS這邊的轉換成功了。
alert陣列會跳S1,S2
alert轉換後的陣列會跳["S1","S2"]
但是另一個php接收不到值,我不知道是哪裡寫錯了
//將student array 宣告為JSON格式,並輸出給php
var studentArrJson = JSON.stringify(allstudent);
alert(studentArrJson);
alert(allstudent);
$.ajax({
type: 'POST',
url: 'TPchange.php',
data: {studentArrJson: studentArrJson},
dataType: 'json',
});
//接收JSON格式的student陣列
$allstudent = json_decode($_POST['studentArrJson']);
var_dump($allstudent);
底下這段會出現Undefined index: studentArrJson並輸出NULL
要把值丟進陣列中,請參考以下
var test = [];
test.push('abc');
test.push(['ab','cd']);
test.push(...['123', '456'])
// output: [ 'abc', [ 'ab', 'cd' ], '123', '456' ]
第二段程式應該要小改
$i = 0;
for(;$i < count($allstudent); $i++){
$sId = $allstudent[$i];
$insert_exam = "INSERT INTO `exam` (`ID`, `sId`) VALUES ('$ID','$sId')";
}
非常感謝!!!
我剛剛試了一下,第二段報錯Warning: count(): Parameter must be an array or an object that implements Countable
用is_array($allstudent);檢查後系統說$allstudent不是陣列...
可是卻能輸出allstudent[0]
強制轉型成arr的話會把所有值塞進arr[0]裡
想問大大有沒有解決方法?
請善用框架提供的debug功能
或者把值先丟到html檢查,看是否如預期
要先了解你丟的內容跟接收到的有沒有相符
可以用print_r()來顯示
你也可以把資料用json輸出
最後再把資料從json_decode 回來
不好意思一直問這些基本問題...但是我試了很久都不知道正確的該怎麼寫
我試著將JS陣列轉換成JSON格式,用.ajax POST 到另一個php,alert告訴我JS這邊的轉換成功了。
alert陣列會跳S1,S2
alert轉換後的陣列會跳["S1","S2"]
但是另一個php接收不到值,我不知道是哪裡寫錯了,這是我第一次使用.ajax
//將student array 宣告為JSON格式,並輸出給php
var studentArrJson = JSON.stringify(allstudent);
alert(studentArrJson);
alert(allstudent);
$.ajax({
type: 'POST',
url: 'TPchange.php',
data: {studentArrJson: studentArrJson},
dataType: 'json',
});
//接收JSON格式的student陣列
$allstudent = json_decode($_POST['studentArrJson']);
var_dump($allstudent);
底下這段會出現Undefined index: studentArrJson並輸出NULL
js是順序執行的 除非你有把它用函示包起來,或是增加event事件
function addStudent(student) {
allstudent.push(student);
var div = document.getElementById("student");
var que = div.insertRow(-1);
que.id = "que" + addstudent;
var testName = que.insertCell(-1);
testName.innerHTML = '<tr><td>' + student + '</td></tr>';
addstudent = addstudent + 1;
var studentArrJson = JSON.stringify(allstudent);
$.ajax({
type: 'POST',
url: 'test.php',
data: { studentArrJson: studentArrJson },
dataType: 'json',
});
}
你應該是每當觸發按鈕時才會發送
那麼就應該把動作放到要觸發的事件當中 而不是放在外層
那自然你的動作只會執行一次,而且因為剛開始傳資料時為空值,自然甚麼都沒有
hi 不知道你的問題是不是這樣
php程式碼的部分
<?php
// 判斷有沒有post到php
if(isset($_POST["tophp"])){
// 接收前端過來的陣列
$list=$_POST["tophp"];
$type = gettype($list);
// 傳回給前端的判別型態
echo json_encode($type);
}
ajax程式碼的部分
$('#ex').click(function () {
let arr=['123','111'];
// 這樣php端接收為字串
// arr_json=JSON.stringify(arr)
// 這樣php端接收為array
arr_json=arr;
console.log(arr[0])
$.ajax({
type: "POST",
url: "ex.php",
dataType:"json",
data: {tophp:arr_json},
success: function(data) {
console.log('php回傳的'+data)
},
error: function(jqXHR) {
console.log("沒回啦")
}
})
})
推斷你的ajax多寫了 var studentArrJson = JSON.stringify(allstudent);