Correct libxdr's behavior a bit: 400+ status codes should be considered successful responses.  In addition, errors should invoke onreadystatechange followed by onerror followed by onloadend.