Как вернуть пустой результат из php и обработать его в машинописи - PullRequest
0 голосов
/ 13 марта 2020

Я довольно новичок в веб-разработке, и у меня возникает следующая проблема:

Я выполняю вызов API из моего набора текста следующим образом:

let postData = new FormData();
postData.append('action', 'getNextSongs')
postData.append('start', this.result.length)
postData.append('searchTerm', this.searchTerm)

this.data = this.http.post(this.url, postData)
this.data.subscribe(data =>{
  console.log(data);
  this.result = this.result.concat(data);
})

А вот код в API:

 $start = $_POST["start"];
    $searchTerm = $_POST["searchTerm"];
    if(empty($searchTerm))
    {
        $sql = "SELECT * FROM songs ORDER BY nameFromPath ASC LIMIT 30 OFFSET $start";
    }
    else
    {
        $sql = "SELECT * FROM songs WHERE nameFromPath LIKE '%$searchTerm%' OR interpret LIKE '%$searchTerm%' ORDER BY nameFromPath ASC LIMIT 30 OFFSET $start";
    }

$result = $conn->query($sql);

$songs = array();

if (mysqli_num_rows($result)>0) {

    // output data of each row

    while($row = $result->fetch_assoc()) {

        array_push($songs, $row);

        //echo json_encode($row);

    }

} else {

    echo "0 results";

}

echo json_encode($songs);

Это работает нормально, но если запрос возвращает 0 результатов (если поисковый запрос не соответствует никому), php возвращает "0 результатов". Если это произойдет, я получаю следующую ошибку в консоли разработчика в chrome:

SyntaxError: Unexpected token r in JSON at position 2 at JSON.parse (<anonymous>)
text: "0 results[]"

Моя цель - просто обработать нулевые результаты в машинописи, например, показать сообщение «больше нет результатов». Как мне этого добиться?

1 Ответ

0 голосов
/ 13 марта 2020

Проблема в том, что когда у вас нет результатов, вы сначала получаете эхо "0 results";, затем вы также получаете эхо json_encode($songs);.

Когда оба используются, вы в конечном итоге возвращаете строку с обоими, такими как 0 results[], что не является допустимой JSON строкой.

Удалите из echo "0 results"; и просто выполните echo json_encode($songs);

или что-то вроде echo json_encode(['error'=> 'No results found']);, таким образом, вы всегда возвращаете действительное JSON строка, даже если есть ошибка или просто нет результатов.

Что-то вроде этого должно сделать:

if (mysqli_num_rows($result)>0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        array_push($songs, $row);
    }

    echo json_encode($songs);

} else {
    echo json_encode(['error'=> 'No results found']);
}

Или просто так:

if (mysqli_num_rows($result)>0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        array_push($songs, $row);
    }

} 
echo json_encode($songs);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...