#javascript #php #jquery
Вопрос:
Я новичок в веб — разработке. Я довольно долго застрял в этой проблеме, связанной с вызовом предупреждения внутри моего AJAX. Все, что я хочу сделать, это показать предупреждение пользователю, если в моей базе данных не найдено записей. Мой код выглядит следующим образом:
Язык JavaScript:
function get_types() {
let $select = $("#colony_type");
$.ajax({
url: 'server.php',
type: 'POST',
data: { "input": "types",
"name": $("#colony_name").val() },
dataType: 'json',
success: function(response) {
let selectedValue = $select.val();
let html = response.filter((e, i, a) => a.indexOf(e) === i).map(item => `<option value="${item}">${item}</option>`);
$select.html(html).val(selectedValue);
},
complete: function() {}
});
}
PHP:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, GET, OPTIONS');
$server="localhost";
$username="root";
$pass="";
$con=mysqli_connect($server,$username,$pass);
$connection=mysqli_select_db($con,"electric billing system");
if($_POST["input"] == "types"){
if(!$connection)
echo "Connection to database failed! Please try again";
else{
$codes=array();
$sql = "SELECT * from colony_master WHERE Colony_name='".$_POST["name"]."'";
$result = $con->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$code=$row["Colony_code"];
}
$sql = "SELECT * from quarter_master_entry WHERE Colony_code='".$code."'";
$result = $con->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
array_push($codes,$row["Qtr_type"]);
}
echo json_encode($codes);
}
else
echo "No colony type information found"; //I want to show this message as alert if no records are found
}
}
}
$con->close();
?>
HTML:
<p id="cln_type"><b>Type</b> :<br><select name="colony_type" id="colony_type" onclick="get_types()">
<option value="default" selected="selected_type">Select your colony type</option>
</select></p>
Если я получаю пустой массив с сервера, то он должен показывать предупреждение. Как мне это сделать? Пожалуйста, помогите мне.
ПРАВКА: Я пытался показать предупреждающее сообщение, используя этот код в своем else
заявлении на php, но все еще не работает:
$message = "No colony type information found";
echo "<script type='text/javascript'>alert('$message');</script>";
Комментарии:
1. Вы никогда не получите пустой массив. Вы получите строку
"No colony type information found"
2. Быстрое исправление: В
success
,if(typeof(response)=="string"){alert(response)}
3. В одном
else
квартале вам, вероятно, следуетJSON.parse(response)
это сделать …4. Сложность здесь в том, что ваш запрос может оказаться в JSON или строке. Лучше исправьте серверную часть, чтобы она всегда выводила один и тот же тип ответа. Это первый шаг к тому, чтобы быть чистым.
Ответ №1:
Исправьте ответ на стороне сервера, чтобы он всегда отвечал с помощью jsonified массива
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
array_push($codes,$row["Qtr_type"]);
}
//echo json_encode($codes);
}else{
$error=array();
$error['error'] = "No colony type information found";
array_push($codes,$error);
}
echo json_encode($codes);
Затем в «аяксе» success
:
success: function(response) {
let selectedValue = $select.val();
response = JSON.parse(response); // Possibly useless... Just as a note.
if(response.error){
alert(response.error)
return
}
let html = response.filter((e, i, a) => a.indexOf(e) === i).map(item => `<option value="${item}">${item}</option>`);
$select.html(html).val(selectedValue);
},
Непроверено… Но вы должны понять суть. 😉
Комментарии:
1. Вероятно, потребуется присоединиться() к массиву html-строк. html() отлично работает с массивом элементов или объектами jq, но сомневаюсь, что он будет работать со строковым массивом без нежелательных
,
2. Мехх… Это просто предложение указать направление. Не идеальное решение. Поздняя субботняя вещь 😉
3. Это показывает ошибку:
Unexpected token o in JSON at position 1
в строкеresponse=JSON.parse(response);
4. Хорошо, тогда просто удалите эту строку. маркер
o
, безусловно, относится кo
«объекту»… Поскольку вы указалиdataType: 'json',
, что Ajax уже выполнил синтаксический анализ. 😉5. Теперь он отображается
[Object object]
, когда я нажимаю на него. Тем не менее, оповещения по-прежнему нет