如題
有加不能接收
沒加就可以
以下php
<?php
header('Content-Type: application/json; charset=UTF-8');
include 'jsonFormat.php';
if(isset($_POST["filename"])){
$filename =$_POST["filename"];
$wherefile='';
//切割字串成陣列
$fileNameCmps = explode(".", $filename);
// 取副檔名
$fileExtension = strtolower(end($fileNameCmps));
if($fileExtension=='apk'){
$wherefile='apkfile/';
}else{
$wherefile='ipafile/';
}
$filepath = "uploaded_files/".$wherefile. $filename;
if(file_exists($filepath)){
// unlink($filepath);
// 開啟json檔
$data=file_get_contents('record.json');
$list = json_decode($data,true);
// $list=$list['filename'];
// echo json_encode($list[0]['data'][0]['listname']);
// 找出選到要刪除的資料
for($i=0;$i<count($list['filename']);$i++){
for($j=0;$j<count($list['filename'][$i]['data']);$j++){
if($list['filename'][$i]['data'][$j]['listname']==$filename){
if(count($list['filename'][$i]['data'])==1){
// 用unset 會讓array型態變object
unset($list['filename'][$i]);
// 用sort校正回array
sort($list['filename']);
}else{
unset($list['filename'][$i]['data'][$j]);
sort($list['filename'][$i]['data']);
}
break;
}
}
}
// file_put_contents("record.json", jsonFormat($list));
echo json_encode('okk');
}
}
以下為ajax
$(document).ready(function () {
$('.del').each(function () {
$(this).click(function () {
let filename=$(this).parent().parent().find('.name').html()
$.ajax({
type: "POST",
url: "delete.php",
dataType:"json",
data: {
filename:filename,
},
success: function(data) {
console.log(data)
},
error: function(jqXHR) {
console.log("沒回啦")
// window.location.reload();
}
})
})
})
});
有大大提供解決辦法嗎?
感謝!!
會跑到 error 事件,代表你的請求一定發生了什麼問題。
你該要先知道,你是發生了什麼錯誤。
而不是亂改程式。
error: function (XMLHttpRequest, textStatus, errorThrown) {
console.log(XMLHttpRequest.responseText);
},
將錯誤事件改用上面的程式碼。
可以在console上看到你發生了什麼錯誤。
在來,就是通靈的階段了。
這邊看不到你的 jsonFormat 這個函式做了什麼處理。
我猜測這裏輸出的東西,並非是文字型態。
因為 file_put_contents 是需要純文字才能寫入的。
再來,其實我明白 file_put_contents 這個真的很方便。
但它很容易有鎖檔及權限的問題。
如果是在WINDOWS系統上使用的話。個人經驗很常發生問題。
一般我還是比較喜歡用fopen來處理。至少發生問題我還可以知道發生什麼事就是了。
當然這是個人感覺問題啦。也可能遇到太多抗了。所以現在都不太喜歡用 file_put_contents
但 file_get_contents 也是很常用就是了。畢竟他比用fopen ,還要不容易發生搶檔問題。
大大您好
您的error log 有幫助到我解決問題了
jsonFormat這是整理json格式 讓自己方便閱讀
結果是我的jsonFormat裡面有個函數沒定義跳警告
不過 file_put_contents 似乎沒受這個警告影響都正常動作
警告基本不是不會影響程式運行 怎麼會影響到ajax的傳送這我滿好奇的
因為警告會輸出內容。會破壞掉AJAX原本要接收的JSON格式的東西。
基本你那段AJAX,如果收到非JSON格式的都會直接報錯。
用我那段可以直接看錯誤訊息或是輸出訊息。
也可以先暫時將 dataType 先改成html看看也行。
重點是找問題要對症下藥。不要自已那邊又猜又改半天。
大大提供error log時問題已解
ajax那個是多問的,因為看起來像是file_put_contents程式執行完 跳警告 中斷 然後echo json_encode('okk');就不執行
所以好奇這警告會造成程式的中斷是怎麼回事
謝謝大大的回答!
在$.ajax裡加
cache: false,
contentType: false,
processData: false,
或是直接用$.post,取代底層的$.ajax
https://api.jquery.com/jquery.post/
我試過您提供的方法
結果跟之前一樣
$.post("delete.php", { filename:filename})
.done(function (data) {
console.log( data );
},"json");