Я прошел все связанные вопросы (с неожиданным концом ввода JSON) и пока не нашел решения.
В основном у меня есть MySQL view и PHP файл, который отображает эти данные. Пока не было только выборочных данных (около 50 тыс. Строк), у меня не было никаких проблем, только небольшая задержка. Теперь я добавил более полный набор данных (около 90 тыс. Строк) и столкнулся с задержкой при полной загрузке данных. Соответственно, когда я открываю этот PHP в браузере, он загружает только часть данных и непрерывно добавляет остаток, пока не покажет все. Но кажется, что await svelte не может справиться с этим.
Это код PHP, лишенный несущественных функций:
header('Access-Control-Allow-Origin: *');
header('Content-Type: application/json');
require_once(__DIR__.'/protected/config.php'); //initial setting
try{
$q = $db->prepare('SELECT * FROM my_view;'); //this is that view in MySQL
$q->execute();
$rows = $q->fetchAll();
echo json_encode($rows);
exit();
}catch(PDOException $ex){
err('error executing query', __LINE__);
};
?>
Размер базовых данных для представления около 9 Мб. (5Mb были в порядке)
И вот код svelte снова без несущественных функций:
<script>
import Chart from "Chart.svelte";
let ready;
let data = loadDataUrl('http://127.0.0.1/myfile.php');
async function loadDataUrl(address) {
try {
const res = await fetch(address);
const text = await res.json(); //here might be the ERROR arising
if (res.ok && text) {
ready = true;
return text;
} else {
throw new Error(text);
}
} catch(ex) {
alert(ex);
};
};
</script>
{#await data}
<p>...loading data...</p>
{:then ready}
<Chart data="{data}" />
{:catch error}
<p style="color: red">Chart not created because of: {error.message}</p>
{/await}
Я почти уверен, что проблема возникает, когда PHP показывает только частичные данные и функция loadDataUrl () пытается проанализировать этот неполный набор данных, но я совершенно не представляю, как сделать «ожидание полной загрузки данных». Это вообще возможно? Или мне нужно как-то сказать это в самом PHP, чтобы показать полный набор данных?