简体   繁体   中英

Ajax Json undefined object on success

I am trying to use an API request from a widget I have installed but I have noticed that my Json data returns a "Object reference not set to instance of an object" exception on success.

Here is the Json:

{
  "ApiKey": "d4f37ba05a1941928de3109c8632b1ce", 
  "Text": "tesst%0A", 
  "Language": "en", 
  "Rule": "Preediting_Forum", 
  "Grammar": "1", 
  "Spell": "1", 
  "Style": "1", 
  "SessionMetadata": "Preediting_Forum;0", 
  "RequestFormat": "HTML"
}

Here is the ajax code for the post request:

$.ajax({
  url: settings.AcceptServerPath + "/Core/AcceptRequest",
  dataType: "json",
  contentType: "application/json",
  type: "POST",
  async: true,
  cache: true,
  data: jsonData,
  success: function (data) {
    console.log(data);
    handleRequestStatus(data, "ACCEPT");
  },
  complete: function (data) {},
  error: function (error) {
    displayFailedMessage("ACCEPT", configuration.language.errorRequestFailed);
  }
});

What could be the cause?

Edit Here is the C# code:

[HttpPost]
        public ActionResult AcceptRequest(CoreApiRequest requestObject)
        {
            try
            {
                if (requestObject == null || requestObject.Text.Length == 0)
                    requestObject = (CoreApiRequest)(new DataContractJsonSerializer(requestObject.GetType())).ReadObject(Request.InputStream);

                Dictionary<string, string> parameters = new Dictionary<string, string>();

                if (requestObject.ApiKey != null && requestObject.ApiKey.Length > 0)
                {
                    parameters.Add("apiKey", requestObject.ApiKey);
                }
                else
                {
                    parameters.Add("username", requestObject.User);
                    parameters.Add("password", requestObject.Password);
                }

                string text = HttpUtility.UrlDecode(requestObject.Text, System.Text.Encoding.UTF8);  

                parameters.Add("text", text);
                parameters.Add("languageid", requestObject.Language);
                parameters.Add("ruleset", requestObject.Rule);
                parameters.Add("grammar", requestObject.Grammar);
                parameters.Add("spell", requestObject.Spell);
                parameters.Add("style", requestObject.Style);

                parameters.Add("requestFormat", requestObject.RequestFormat);

                if (requestObject.GlobalSessionId != null && requestObject.GlobalSessionId.Length > 0)
                {
                    parameters.Add("globalSessionId", requestObject.GlobalSessionId);
                }

                if (requestObject.IEDomain != null && requestObject.IEDomain.Length > 0)
                    parameters.Add("ieDomain", requestObject.IEDomain);


                if (requestObject.SessionMetadata != null && requestObject.SessionMetadata.Length > 0)
                    parameters.Add("sessionMetadata", requestObject.SessionMetadata);

                var model = AcceptCoreManager.GenericRequest(parameters);
                return Json(model);


            }
            catch (Exception e)
            {
                var errorModel = new CoreApiException(e.Message, "Accept Request Controller");
                return Json(errorModel);
            }

        }

There is also a [RestHttpVerbFilter] for the AcceptRequest. Not sure which one is used in this case...

i have the same issue, its because the response is 'no content', when the response is 'no content', ie. nothing returned. ajax shows undefined object. so make sure response contains json object. just try alert(JSON.stringify(data));

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM