Пытаюсь вывести товары из своей бд на страницу, что не так? Текст ошибки "Uncaught SyntaxError: Unexpected token < in JSON at position 0 at JSON.parse (<anonymous>) at Object.showGoods [as success] (shop.js:12) at i (jquery-3.2.1.min.js:2) at Object.fireWith [as resolveWith] (jquery-3.2.1.min.js:2) at A (jquery-3.2.1.min.js:4) at XMLHttpRequest.<anonymous> (jquery-3.2.1.min.js:4)" Все файлы: HTML: <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <style> body { background-image: linear-gradient(to left, white, blue); } </style> </head> <body> <div class="goods-out"></div> <script src="js/jquery-3.2.1.min.js"></script> <script src="js/shop.js"></script> </body> </html> Код (Javascript): function init() { $.post( "core.php", { "action" : "init" }, showGoods ); } function showGoods(data) { data = JSON.parse(data); console.log(data); var out='<select>'; for (var id in data) { out +=`<option>${data[id].name}</option>`; } out +='</select>'; $('.goods-out').html(out); } $(document).ready(function () { init(); }); PHP: <?php $action = $_POST['action']; require_once 'function.php'; switch ($action) { case 'init': init(); break; } ?> PHP: <?php $host = "localhost"; $user = "mysql"; $pass = "mysql"; $name = "eshop"; function connect(){ $db = mysqli_connect($host, $user, $pass, $name); if($db){ echo ""; }else{ echo mysqli_error(); } function init(){ //список товаров $db = connect(); $sql = "SELECT * FROM goods"; $result = mysqli_query($db,$sql); if (mysqli_num_rows($result) > 0) { $out = array(); while($row = mysqli_fetch_assoc($result)) { $out[$row["id"]] = $row; } echo json_encode($out); } else { echo "0"; } mysqli_close($db); } ?>
PHP: <?php $host = "localhost"; $user = "mysql"; $pass = "mysql"; $name = "eshop"; function connect(){ $db = mysqli_connect($host, $user, $pass, $name); if($db){ echo ""; }else{ echo mysqli_error(); } function init(){ //список товаров $db = connect(); $sql = "SELECT * FROM goods"; $result = mysqli_query($db,$sql); if (mysqli_num_rows($result) > 0) { $out = '<select>'; while($row = mysqli_fetch_assoc($result)) { $out .= '<option>'.$row["name"].'<option>'; } $out .='</select>'; echo $out; } else { echo "0"; } mysqli_close($db); } ?> Код (Javascript): $.post( "core.php", { action:"init" }) .done(function(data) { if(data != 0){ $('.goods-out').html(data); } });
PHP: <?php $action = $_POST['action']; require_once 'function.php'; switch ($action) { case 'init': init(); break; } ?> Здесь теперь ругается на неизвестную функцию init
Зачем вы вообще передаете туда post init? нельзя что ли просто сделать так: PHP: <?php require_once'function.php'; $out = init(); ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <style> body { background-image: linear-gradient(to left, white, blue); } </style> </head> <body> <div><?=$out?></div> <script src="js/jquery-3.2.1.min.js"></script> <script src="js/shop.js"></script> </body> </html>
15 строка js - кавычки --- Добавлено --- @Artur_hopf, смотри коннект функцию внимательно. Ты копипастишь ошибку грубую --- Добавлено --- крч, тут много чего не правильного
Да я к тому что можно же без js, даже если надо что то передать: PHP: <?php $host = "localhost"; $user = "mysql"; $pass = "mysql"; $name = "eshop"; function init(){ //список товаров $db = mysqli_connect($host, $user, $pass, $name); $sql = "SELECT * FROM goods"; $result = mysqli_query($db,$sql); if (mysqli_num_rows($result) > 0) { $out = '<select>'; while($row = mysqli_fetch_assoc($result)) { $out .= '<option>'.$row["name"].'<option>'; } $out .='</select>'; mysqli_close($db); return $out; } else { mysqli_close($db); return false; } } ?> PHP: <?php include 'function.php'; $out = init(); ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <style> body { background-image: linear-gradient(to left, white, blue); } </style> </head> <body> <div><?=$out?></div> </body> </html>