If the posted data from your AJAX call has empty values, then ofcourse var_dump($this->input->post(NULL, TRUE)) will be an empty array
Your problem lies in your JavaScript code. For some reason the serialize method is returning an empty form.
Find out what could cause that. The problem is not a CI related issue.
Try this out, and see what is alerted
Code:
<!DOCTYPE html>
<html>
<head>
<script
src="https://code.jquery.com/jquery-1.12.4.min.js"
integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ="
crossorigin="anonymous"></script>
</head>
<body>
<p>A simple form to test $(form).serialize()</p>
<form method="post" action="/">
<div>
<label>Field 1</label>
<input type="text" name="field1" value="123" />
</div>
<br>
<div>
<label>Field 2</label>
<input type="text" name="field2" value="456" />
</div>
<br>
<div>
<label>Field 3</label>
<input type="text" name="field3" value="789" />
</div>
<br>
<button onclick="save(this.form); return false">Serialize it!</button>
</form>
<script>
function save(form) {
alert($(form).serialize());
}
</script>
</body>
</html>