I found some support via the Ubidots forum, see forwarded message below. This works like a charm.
The payload being sent does not manage the correct format. If you refer to the Ubidots API documentation, you will notice that the payload must contain the following format:
{"position": {"value" : 1, "context":{"lat":-6.2, "lng":75.4}}}
In your case, the payload should be:
var json={ voltage:voltage, bat_percentage:bat_percentage, temp:temp, position:{"value":1, "context": position}, lat: lat, lon: lon }