Mengapakah API PHP saya berhenti berfungsi dan tidak lagi mengembalikan json?
P粉447785031
P粉447785031 2023-12-16 09:46:32
0
1
607

Beberapa tahun lalu saya mencipta bahagian belakang (PHP untuk mendapatkan beberapa data json) untuk beberapa apl mudah alih saya. Saya tidak pernah menyentuh kod ini sejak itu. Sekarang ia berhenti bekerja minggu lalu. Saya bukan pembangun bahagian belakang jadi saya tidak mempunyai banyak pengalaman di sini, tetapi beberapa tahun yang lalu saya fikir adalah lebih baik untuk membuat bahagian belakang saya sendiri daripada menggunakan Firebase/Serverless... yang bukan idea terbaik saya: )

Apa yang saya cuba:

  • Semak url menggunakan Chrome --> semuanya berfungsi dengan baik (saya boleh melihat data json saya)
  • Semak dalam apl atau dalam Posmen: (Tajuk: Teks Jenis Kandungan/html)
<!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <meta name="robots" content="noindex, nofollow">
    <title>One moment, please...</title>
    <style>
    body {
        background: #F6F7F8;
        color: #303131;
        font-family: sans-serif;
        margin-top: 45vh;
        text-align: center;
    }
    </style>
    </head>
    <body>
    <h1>Please wait while your request is being verified...</h1>
    <form id="wsidchk-form" style="display:none;" action="/z0f76a1d14fd21a8fb5fd0d03e0fdc3d3cedae52f" method="get">
    <input type="hidden" id="wsidchk" name="wsidchk"/>
    </form>
    <script>
    (function(){
        var west=+((+!+[])+(+!+[]+!![]+!![]+!![]+[])+(+!+[]+!![]+!![]+!![])+(+!+[]+!![]+!![]+!![]+[])+(+!+[])+(+!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+[])+(+!+[]+!![]+!![]+!![]+!![])+(+!+[]+[])),
            east=+((+!+[])+(+!+[]+!![]+[])+(+!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(+!+[]+[])+(+![])+(+!+[]+!![]+[])+(+!+[]+!![])+(+!+[]+!![]+!![]+[])),
            x=function(){try{return !!window.addEventLis tener;}catch(e){return !!0;} },
            y=function(y,z){x() ? document.addEventLis tener("DOMContentLoaded",y,z) : document.attachEvent("onreadystatechange",y);};
        y(function(){
            document.getElementById('wsidchk').value = west + east;
            document.getElementById('wsidchk-form').submit();
        }, false);
    })();
    </script>
    </body>
    </html>

Ini ialah fail php saya:

$response = array();

function saveResultOfQueryToArray($result){
  global $response;
  $response['workouts'] = array();

  while($row = mysqli_fetch_array($result)){

      $temp = array();

      //  $temp['aufruf'] = $aufruf;
      $temp['error'] = false;
      $temp['workoutname'] = $row['workoutname'];          
      $temp['duration'] = $row['duration'];          
      ...    

      array_push($response['workouts'],$temp);

  }
}

if($_SERVER['REQUEST_METHOD']=='GET') {
  $db = new DbOperation();
  $users = $db->getHighestRatingWith31Results();
  saveResultOfQueryToArray($users, $chooseMethod);
}
else {
    $response['error'] = true;
    $response['message'] = "Invalid Request";
}

echo json_encode($response);

Bolehkah seseorang menjelaskan kepada saya apa yang saya lakukan salah/apa yang boleh diubah?

P粉447785031
P粉447785031

membalas semua(1)
P粉821231319

Nampak if($_SERVER['REQUEST_METHOD'] == 'GET') 没有 $response。除非代码中有更多内容,否则 $response tidak jelas.

if($_SERVER['REQUEST_METHOD']=='GET') {
  $db = new DbOperation();
  $users = $db->getHighestRatingWith31Results();
  saveResultOfQueryToArray($users, $chooseMethod);
  $response['error'] = false;
  $response['message'] = 'Whatever you want returned here.';
else {
    $response['error'] = true;
    $response['message'] = "Invalid Request";
}

echo json_encode($response);

Sesuatu seperti ini sepatutnya berjaya! Saya juga mengesyorkan melihat respons HTTP, seperti HTTP 405. https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/405

EDIT: Saya melihat kemas kini anda dan saya minta maaf, tetapi ia menimbulkan lebih banyak persoalan. Iaitu, $db->getHighestRatingWith31Results(); 是做什么的?函数 saveResultOfQueryToArray() menerima satu parameter, tetapi penggunaannya adalah untuk menyediakan dua parameter kepada fungsi? saveResultOfQueryToArray sedang memanggil mysqli_fetch_array(), yang memerlukan contoh mysqli_result.

Ini cadangan saya:

  • Gunakan PDO dan bukannya mysqli. Saya tahu anda mengatakan ini kod lama, tetapi PDO hebat. https://www.php.net/manual/en/class.pdo dan https://phpdelusions.net/pdo
  • Saya mungkin tidak akan menetapkan $response sebagai pembolehubah global. Saya sama ada akan mengembalikan $response daripada saveResultOfQueryToArray() atau mempertimbangkan untuk lulus melalui rujukan. https://www.php.net/manual/ms/language. references.pass.php
  • Sekali lagi saya syorkan anda melihat kod respons HTTP.
  • Akhirnya, saya tahu ini sukar, tetapi namakan pembolehubah anda sesuatu yang lebih mudah difahami dan dokumenkan kod anda dengan ulasan. Terdapat jenaka lama dalam sains komputer: "Dua bahagian paling sukar dalam sains komputer ialah pembatalan cache, penamaan sesuatu dan ralat satu demi satu." "Dokumen adalah surat cinta untuk diri masa depan anda." - Damian Conway
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan