Я использую последнюю версию OpenResty для выполнения некоторых манипуляций с данными запроса POST с использованием Nginx Lua. Мой тест Lua скрипт, вызывается через rewrite_by_lua_file
вызов простоЗапрос POST Обработка данных формы с помощью Nginx Lua
ngx.req.read_body();
local args = ngx.req.get_post_args();
ngx.say(args["a"]);
Чтобы проверить это у меня есть простой HTML документ
<html>
<head>
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js">
</script>
<script>
$(document).ready(function(){
$('#btnPOST').click(doPOST);
$('#btnAJAX').click(doAJAX);
});
function doPOST()
{
$.post('index.php',{a:2,b:3},afterAJAX);
}
function doAJAX()
{
var fd = new FormData();
fd.append('a',2);
fd.append('b',3);
$.ajax(
{url:'index.php',data:fd,cache:false,contentType:false,
processData:false,
type:'POST',success:function(d){afterAJAX(d);},error:netError});
}
function afterAJAX(d,e)
{
debugger;
alert(d);
}
function netError(){alert('error');}
</script>
</head>
<body>
<button id='btnPOST'>Post</button>
<button id='btnAJAX'>Ajax</button>
</body>
</html>
Нажатие кнопки POST дает ожидаемые результаты, - говорит окно предупреждения " 2' .
Нажмите кнопку AJAX, которая отправляет форму OTH, возвращает d=nil
.
Я не уверен, что здесь происходит. Я подозреваю, что проблема здесь связана с тем, как отправляются данные о многостраничной форме. Кажется, что Lua/Nginx отсутствует при анализе данных формы на многочастных границах. Однако не ясно, что я должен сделать с этим в конце Lua. Я бы очень признателен за помощь
Спасибо - это как я подозревал, и вполне разумно, что Nginx не может «найти» сообщения args + data. Тем не менее, есть ли какие-либо внутренние методы в API Nginx (которые я еще не нашел), которые можно использовать для анализа таких данных с множественной формой или мне нужно будет что-то переделать? – DroidOS
@DroidOS Возможно, вы сможете попробовать этот проект: https://github.com/openresty/lua-resty-upload. – xiaochen
@DroidOS Я знаю, что в модуле lua-resty-upload есть парсер данных с несколькими частями. Но я не использовал его в своем проекте. Я не уверен, можете ли вы использовать его напрямую. Ответ обновлен. – xiaochen