when need json return, use perform_json instead.