This was the result of a request being redirected by a firewall (Securi). HTTPS wasn’t set up correctly and would cause a redirect loop if not for the firewall fowarding.
I untangled that mess and it’s working fine now.
Just putting my answer here in case this happens to you.
I think this might be a firewall, cache or cookie problem.
I can see successful requests to admin-ajax.php have a different cookie set. The heartbeat action, for example, uses different cookies than acf/fields/relationship/query
However, both requests go to https://mysite.com/wp-admin/admin-ajax.php
More context:
I’m using the latest version, 5.8.7 with WordPress 5.2.X
When performing a live search in an ACF relationship field in the admin section, admin-ajax.php is called.
On my local dev environment, I can search in that box and have results returned. Even if there are no results, I receive this:
{"results":[],"more":false,"limit":0}
On production, if I search, all I ever receive is (results or not) an empty string.
wp_debug doesn’t log an error.