Краткий ответ: ваш метод foo()
возвращается немедленно, а вызов $ajax()
выполняется асинхронно после возврата функции . Проблема заключается в том, как и где сохранить результаты, полученные при вызове async, после его возврата.
В этом потоке было задано несколько решений. Возможно, самый простой способ - передать объект методу foo()
и сохранить результаты в члене этого объекта после завершения асинхронного вызова.
function foo(result) {
$.ajax({
url: '...',
success: function(response) {
result.response = response; // Store the async result
}
});
}
var result = { response: null }; // Object to hold the async result
foo(result); // Returns before the async completes
Обратите внимание, что вызов foo()
] все равно не вернут ничего полезного. Однако результат асинхронного вызова теперь будет сохранен в result.response
.
Вам нужно выполнить итерацию по набору результатов, возвращаемому MySQL. Это означает вызов mysqli_fetch_array()
для каждой строки этого набора результатов. Вы можете сделать это, используя цикл while
:
while($row = mysqli_fetch_assoc($result)) {
$rows[] = array("name" => $row['name'],
"city" => $row['bill_city'],
"code" => $row['bill_code'],
"country" => $row['bill_country'],
"street" => $row['bill_street'],
"latitude" => $row['latitude'],
"longitude" => $row['longitude'],
"type" => $row['setype']);
}
}
Не использовать для loop
для извлечения SQL-запросов. Вместо этого используйте while
:
if($result->num_rows > 0){
while($row = mysqli_fetch_assoc($result))
{
$rows[] = array("name" => $row[0],
"city" => $row[1],
"code" => $row[2],
"country" => $row[3],
"street" => $row[4],
"latitude" => $row[5],
"longitude" => $row[6],
"type" => $row[7]);
}
}