AJAX - это асинхронный Javascript и XML. Зачем отправлять обратно HTML?
Указатели
Если вы делаете это через Ajax, я бы настоятельно не рекомендовал отправлять чистый HTML. Вы должны отправить обратно некоторые данные JSON и обработать их соответственно на стороне клиента.
Используйте PDO вместо MySQLi
Решение PHP
<?php
include "db.php";
if (isset( AJAX - это асинхронный Javascript и XML. Зачем отправлять обратно HTML?
Указатели
-
Если вы делаете это через Ajax, я бы настоятельно не рекомендовал отправлять чистый HTML. Вы должны отправить обратно некоторые данные JSON и обработать их соответственно на стороне клиента.
-
Используйте PDO вместо MySQLi
Решение PHP
[110] Решение Javascript:
$.ajax({
//AJAX type is "Post".
type: "POST",
//Data will be sent to "ajax.php".
url: "ajax.php",
//Data, that will be sent to "ajax.php".
data: {
//Assigning value of "name" into "search" variable.
search: name
},
//If result found, this funtion will be called.
success: function(data) {
//Assigning result to "display" div in "search.php" file.
const list = JSON.parse(data);
const html = list.length > 0 ?
list.map(name=>{
`<li onclick="${name}">
<a>${name}</a>
</li>`
}).join("") :
`<li>No matches found</li>`
$("#display").html(`<ul>${html}</ul>`).show();
}
});
POST['search'])) {
$Name = AJAX - это асинхронный Javascript и XML. Зачем отправлять обратно HTML?
Указатели
-
Если вы делаете это через Ajax, я бы настоятельно не рекомендовал отправлять чистый HTML. Вы должны отправить обратно некоторые данные JSON и обработать их соответственно на стороне клиента.
-
Используйте PDO вместо MySQLi
Решение PHP
[110] Решение Javascript:
$.ajax({
//AJAX type is "Post".
type: "POST",
//Data will be sent to "ajax.php".
url: "ajax.php",
//Data, that will be sent to "ajax.php".
data: {
//Assigning value of "name" into "search" variable.
search: name
},
//If result found, this funtion will be called.
success: function(data) {
//Assigning result to "display" div in "search.php" file.
const list = JSON.parse(data);
const html = list.length > 0 ?
list.map(name=>{
`<li onclick="${name}">
<a>${name}</a>
</li>`
}).join("") :
`<li>No matches found</li>`
$("#display").html(`<ul>${html}</ul>`).show();
}
});
POST['search'];
$Query = "SELECT Name FROM search WHERE Name LIKE '$Name%' LIMIT 5";
$ExecQuery = MySQLi_query($con, $Query);
$res = [];
while ($Result = MySQLi_fetch_array($ExecQuery)) {
$res[] = $Result['Name'];
}
echo json_encode($res);
}
Решение Javascript:
$.ajax({
//AJAX type is "Post".
type: "POST",
//Data will be sent to "ajax.php".
url: "ajax.php",
//Data, that will be sent to "ajax.php".
data: {
//Assigning value of "name" into "search" variable.
search: name
},
//If result found, this funtion will be called.
success: function(data) {
//Assigning result to "display" div in "search.php" file.
const list = JSON.parse(data);
const html = list.length > 0 ?
list.map(name=>{
`<li onclick="${name}">
<a>${name}</a>
</li>`
}).join("") :
`<li>No matches found</li>`
$("#display").html(`<ul>${html}</ul>`).show();
}
});
Да посмотрите то, что Вы делаете, там возвращает указатель на объект (названный массив board
) который был создан на стеке. Массив уничтожается, когда он выходит из объема, таким образом, указатель больше не указывает ни на какой доступный объект (висячий указатель).
Необходимо удостовериться, что массив выделяется на "куче" вместо этого, с помощью new
. Освященный метод для создания динамично выделенного массива в современном C++ должен использовать что-то как std::vector
класс, хотя это более сложно здесь, так как Вы пытаетесь создать 2D массив.
char **createBoard()
{
char **board=new char*[16];
for (int i=0; i<16; i++)
{
board[i] = new char[10];
for (int j=0; j<10; j++)
board[i][j]=(char)201;
}
return board;
}
void freeBoard(char **board)
{
for (int i=0; i<16; i++)
delete [] board[i];
delete [] board;
}
Лучший подход, создают класс платы и делают функцию ctreateBoard его конструктором:
class Board {
private:
char mSquares[16][10];
public:
Board() {
for(int i=0; i<16;i++){
for( int j=0;j<10;j++){
mSquares[i][j]=201;
}
}
// suitable member functions here
};
Для получения информации о том, как использовать такой класс, нет никакой замены для чтения хорошей книги. Я настоятельно рекомендую Ускоренный C++ Andrew Koenig и Barbra Moo.
Я действительно рекомендовал бы использовать вектор STL <> или boost/multi_array контейнеры для этого.
Если бы необходимо использовать массивы, то я рекомендовал бы использовать определение типа для определения массива.
typedef char[16][10] TBoard;
Вы могли также возвратиться
char**
... но затем необходимо было бы преобразовать тип его к корректному размеру для индексации его правильно. C++ не поддерживает динамичный несколько массивов размера.
Также, поскольку другие предположили, что Вы не можете возвратить объект на стеке (т.е. локальная переменная)
Этот подход не будет работать. При возврате указателя на локальную переменную, Вы столкнетесь с неопределенным поведением. Вместо этого выделите массив на "куче" с новым и скопируйте данные в него вручную индексация его.
Не возвращайте указатель на локальную переменную как другой упомянутый. Если бы я был вынужден сделать то, чего Вы хотите достигнуть, то сначала я пошел бы для станд.:: вектор. Так как Вы не изучили станд.:: вектор, вот иначе:
void createBoard(char board[16][10])
{
int j =0;int i = 0;
for(i=0; i<16;i++){
for( j=0;j<10;j++){
board[i][j]=(char)201;
}
}
}
Вы не должны возвращать указатель на локальные переменные функций, потому что это пространство перезаписывается, как только функция возвращается.
Устройство хранения данных, связанное с платой, находится на стопке функции.
Простой ответ на Ваш вопрос является символом **.
Однако не ДЕЛАЙТЕ IT! Ваша переменная "платы" не продлится снаружи createBoard ().
Повышение использования:: multi_array и передача это как ссылка на createBoard () или возврат это непосредственно (но если Вы делаете это, это будет скопировано).