【问题标题】:Ajax Json undefined object on successAjax Json未定义对象成功
【发布时间】:2018-11-21 16:02:56
【问题描述】:

我正在尝试使用来自已安装小部件的 API 请求,但我注意到我的 Json 数据在成功时返回“对象引用未设置为对象实例”异常。

这是 Json:

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

这里是发布请求的 ajax 代码:

$.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);
  }
});

可能是什么原因?

编辑 这是 C# 代码:

[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);
            }

        }

AcceptRequest 还有一个 [RestHttpVerbFilter]。不确定在这种情况下使用哪一个...

【问题讨论】:

  • 这来自您的 C# 代码。你需要调试它。
  • @SLaks 我用 C# 代码编辑我的帖子。我对它不是很熟悉,那么在这种情况下我应该如何进行调试呢?
  • 了解如何使用 Visual Studio 的调试器。此外,删除您的 catch 块,以便请求实际上会失败,而不是静默返回无用的 JSON。

标签: c# jquery json ajax


【解决方案1】:

我有同样的问题, 这是因为响应是“没有内容”, 当响应为“无内容”时,即。什么都没有返回。 ajax 显示未定义的对象。 所以确保响应包含 json 对象。试试 alert(JSON.stringify(data));

【讨论】:

  • 我是否说过数据返回 {"Exception":"Object reference not set to instance of an object","Context":"Accept Request Controller","ResponseStatus":"FAILED".. .}。我想知道的是,即使ajax请求成功,是什么导致了这个错误?
猜你喜欢
  • 1970-01-01
  • 2016-10-31
  • 1970-01-01
  • 2017-01-24
  • 2012-04-11
  • 2018-05-24
  • 2023-02-21
  • 2012-03-16
  • 1970-01-01
相关资源
最近更新 更多