Если оставить в стороне вопрос о том, чтобы позволить пользователю в основном создавать любые SQL-команды и отправлять их на ваш сервер - ужасная идея с ужасными последствиями для безопасности, проблема с вашим сценарием - это неспособность понять природу AJAX. 1001 *
Вызов AJAX является асинхронным, поэтому ваш метод возвращается до завершения вызова AJAX. У вас есть два способа справиться с этим. Передайте обратный вызов вашей функции и выполните обратный вызов, когда завершится публикация AJAX. Это сохраняет асинхронный характер запроса. Кроме того, вы можете использовать полный синтаксис $ .ajax (), чтобы выполнить публикацию и установить для параметра async
значение true. Затем вы можете сохранить результаты запроса AJAX в переменной, ограниченной внешним блоком в вашей функции, и вернуть ее в конце функции. Установка async
в значение true в основном делает то, что делает обратный вызов, за исключением того, что jQuery обрабатывает его под капотом.
function mysql(data, callback) {
$.post( "scripts/ajax_mysql.php",args,function(data) {
if (callback) {
callback(data);
}
});
}
mysql({ table:"user", where:"nickname='test'", get:"email" }, function(user) {
$('#email').val(user.email);
...
});
или
function mysql(data, callback) {
var value;
$.ajax({
url: "scripts/ajax_mysql.php",
type: 'post',
async: false,
data: args,
success: function(data) {
value = data;
}
});
return value;
}
с существующей семантикой вызова.