#php #jquery #ajax
#php #jquery #ajax
Вопрос:
ИТАК, у меня есть 3 поля выбора, и я хотел бы заполнить # 2 и # 3 на основе выбранного значения в # 1.
JS отслеживает изменение поля в # 1, успешно отправляет его в мой PHP-скрипт, но там я получаю ошибку «Преобразование массива в строку» при вставке переменной $ _POST [‘problem’] в мой запрос для получения соответствующих результатов.
Я попробовал json_encode и убедился, что исходное выбранное значение в первом поле выбора (select id =»проблема») является массивом, следовательно, не понимаю, откуда берется ошибка преобразования.
ОШИБКА:
<b>Notice</b>: Array to string conversion in <b>Z:xampphtdocsqcisourceihgajax.php</b> on line <b>17</b><br />
{"current_field":null,"field_count":null,"lengths":null,"num_rows":null,"type":null}
Есть предложения?
HTML
<p>Problem Experienced</p>
<!-- Problem -->
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-warning"></i></span>
<select id="problem" name="problem" class="form-control select2" multiple="multiple" data-placeholder="Select a Problem">
<option value=""> </option>
<?php
// define query
$sql = "SELECT Issue, Description FROM qci_problems_index_new ORDER BY Issue";
// query
$result = $mysqli->query($sql) or die('<p>Query to get Issue from qci_problems_index_new table failed: ' . mysql_error() . '</p>');
while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
$problem = $row['Issue'];
$desc = $row['Description'];
echo "<option value="$problem" data-desc="$desc">" . $problem . "</option>n";
}
$result->free();
?>
</select>
</div>
<p>Problem Category</p>
<!-- Problem Category -->
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-warning"></i></span>
<select id="problem_category" name="problem_category" class="form-control select2" multiple="multiple" data-placeholder="Select a Problem Category">
<option value=""> </option>
<?php
// define basic query
$sql = "SELECT DISTINCT Category FROM qci_problems_index_new ORDER BY Category";
// query
$result = $mysqli->query($sql) or die('<p>Query to get Category data from qci_problems_index_new table failed: ' . mysql_error() . '</p>');
while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
$category = $row["Category"];
echo "<option value="$category">" . $category . "</option>n";
}
$result->free();
?>
</select>
</div>
<p>Department Responsible</p>
<!-- Department Responsible -->
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-bars"></i></span>
<select id="department" name="department" class="form-control select2" multiple="multiple" data-placeholder="Select a Department">
<option value=""> </option>
<?php
// define basic query
$sql = "SELECT DISTINCT Department_Responsible FROM qci_problems_index_new ORDER BY Department_Responsible";
// query
$result = $mysqli->query($sql) or die('<p>Query to get department_responsible from qci_problems_index_new table failed: ' . mysql_error() . '</p>');
while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
$dept = $row["Department_Responsible"];
echo "<option value="$dept">" . $dept . "</option>n";
}
$result->free();
?>
</select>
</div>
JS
<script type="text/javascript" language="javascript">
$(function () {
$('#problem').change(function () {
$.ajax({
type: 'POST',
url: 'ajax.php',
data: {
problem: $(this).val()
},
dataType: 'json',
success: function (data)
{
var Category = data[0];
var Department_Responsible = data[1];
$('#problem_category').val(Category);
$('#department').val(Department_Responsible);
}
});
});
});
</script>
ajax.php
<?php
if(isset($_POST['problem'])) {
// Start MySQLi connection
include './plugins/MySQL/connect_db.php';
$db = new mysqli($dbhost,$dbuser,$dbpass,$dbname);
// display error if connection cannot be established
if($db->connect_errno > 0){
die('Unable to connect to database [' . $mysqli->connect_error . ']'); }
// sanitize variables
$problem = $_POST['problem']; //mysqli_real_escape throws error, ignore for now
// run query
$result = $db->query("SELECT Category, Department_Responsible FROM qci_problems_index_new WHERE Issue= '".$problem."'");
// return data as array
$array = mysqli_fetch_array($result);
echo json_encode($result);
}
?>
Комментарии:
1. Пожалуйста, добавьте сведения об ошибке…
2. вау, неужели никто …? я наткнулся здесь на загадку или код в порядке, и здесь виноват мой сервер?
Ответ №1:
Исправил это сам…
Помимо некоторых незначительных ошибок с JavaScript, основная проблема заключалась в том, что я использую плагин Jquery Select2, который не обрабатывает AJAX так же, как обычные <select>
поля. Мне пришлось вручную trigger('change')
обрабатывать все мои поля, чтобы отобразить значение AJAX.
Javascript
<script type="text/javascript" language="javascript">
$(function () {
$('#problem').change(function () {
$.ajax({
type: 'POST',
url: 'ajax.php',
data: 'problem=' $(this).val(),
dataType: 'json',
success: function (data)
{
var data0 = data[0];
var data1 = data[1];
$('#problem_category').val(data0);
$('#department').val(data1);
$('#problem_category').trigger('change');
$('#department').trigger('change');
}
});
});
});
</script>
Ajax.php
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
if(isset($_POST['problem'])) {
// Start MySQLi connection
include '../../plugins/MySQL/connect_db.php';
$db = new mysqli($dbhost,$dbuser,$dbpass,$dbname);
// display error if connection cannot be established
if($db->connect_errno > 0){
die('Unable to connect to database [' . $db->connect_error . ']'); }
// run query
$sql = "SELECT Category, Department_Responsible FROM qci_problems_index_new WHERE Issue= '".$_POST['problem']."'";
$result = $db->query($sql) or die(mysqli_error());
// return data as array
$array = mysqli_fetch_array($result);
echo json_encode($array);
}
?>
HTML:
<p>Problem Experienced</p>
<!-- Problem -->
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-warning"></i></span>
<select id="problem" name="problem" class="form-control select2" data-placeholder="Select a Problem" style="width: 100%;">
<option value=""> </option>
<?php
// define query
$sql = "SELECT Issue, Description FROM qci_problems_index_new ORDER BY Issue";
// query
$result = $mysqli->query($sql) or die('<p>Query to get Issue from qci_problems_index_new table failed: ' . mysql_error() . '</p>');
while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
$problem = $row['Issue'];
$desc = $row['Description'];
echo "<option value="$problem" data-desc="$desc">" . $problem . "</option>n";
}
$result->free();
?>
</select>
</div>
<p class="help-block" width="100%"><div id="output01" name="output01"></div></p>
<hr />
<p>Problem Category</p>
<!-- Problem Category -->
<select id="problem_category" name="problem_category" class="form-control select2" data-placeholder="Select a Problem Category" style="width: 100%;">
<option value=""> </option>
<?php
// define basic query
$sql = "SELECT DISTINCT Category FROM qci_problems_index_new ORDER BY Category";
// query
$result = $mysqli->query($sql) or die('<p>Query to get Category data from qci_problems_index_new table failed: ' . mysql_error() . '</p>');
while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
$category = $row["Category"];
echo "<option value="$category">" . $category . "</option>n";
}
$result->free();
?>
</select>
<hr />
<p>Department Responsible</p>
<!-- Department Responsible -->
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-bars"></i></span>
<select id="department" name="department" class="form-control select2" data-placeholder="Select a Department" style="width: 100%;">
<option value=""> </option>
<?php
// define basic query
$sql = "SELECT DISTINCT Department_Responsible FROM qci_problems_index_new ORDER BY Department_Responsible";
// query
$result = $mysqli->query($sql) or die('<p>Query to get department_responsible from qci_problems_index_new table failed: ' . mysql_error() . '</p>');
while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
$dept = $row["Department_Responsible"];
echo "<option value="$dept">" . $dept . "</option>n";
}
$result->free();
?>
</select>
</div>