【问题标题】:Succesfull $.Ajax and $.Post calls always return failure from C#成功的 $.Ajax 和 $.Post 调用总是从 C# 返回失败
【发布时间】:2014-10-24 16:00:34
【问题描述】:

我需要一个跨域 web api 方法来从 C# 返回有效的 jsonp 到一些 javascript。我似乎无法让这个魔法发生。我环顾网络,找不到适合我需要和工作的从头到尾的示例...... Fiddler 显示我正在返回有效的 json 数据,但是当我在 F12 开发工具中遇到断点或触发结果时是一条失败消息。

这是我目前得到的:

C#

/// <summary>
/// POST: /Instance/RefreshItem
/// </summary>
/// <param name="instanceId"></param>
/// <returns>Json</returns>
[HttpPost]
public System.Web.Mvc.JsonResult RefreshItem(int instanceId, Guid customerId)
        {
        try
        {
            var clientConnection = Manager.ValidateInstance(customerId, instanceId);
            clientConnection.RefreshItem();

            var result = new MethodResult()
            {
                Success = true,
                Value = instanceId,
                Message = "Item successfully refreshed."
            };

            return new System.Web.Mvc.JsonResult() { Data = result };
        }
        catch (Exception ex)
        {
            Manager.LogException(_logger, ex, customerId, instanceId);

            var result = new MethodResult()
            {
                Success = false,
                Value = instanceId,
                Message = ex.GetBaseException().Message
            };
            return new System.Web.Mvc.JsonResult() { Data = result };
        }
    }

JS

Example.RefreshItem = function ()
{
    Example.SDK.JQuery.getSettings(
    function (settings, userId, userLocaleId)
    {
        alert("Attempting to refresh item for instance " + settings.ConnectionId + "\r\nThis may take awhile.");

        var url = settings.SystemUrl + "/Api/WebApiServices/ExampleAdmin/RefreshItem?customerId=" + settings.CustomerId + "&instanceId=" + settings.ConnectionId;

        $.ajax({
            url: url,
            dataType: "jsonp",
            jsonpCallback: 'RefreshItemCallback',
            success: RefreshItemCallback
        })
    },
    Example.SDK.JQuery.defaultErrorCallback
);
}

function RefreshItemCallback(data)
{
    alert(data.d.Message);
}

我也试过 $.Post().Always() 得到相同的结果。

我做错了什么???

【问题讨论】:

  • 1.将 JSONP 与 POST 一起使用是没有意义的。 2. 你确定你需要使用 JSONP 吗?这是跨域请求吗? 3.你得到的错误是什么?是在 C# 端还是 JavaScript 端?
  • 这是从客户 MS CRM 实例到我们的 azure 应用程序的跨域请求。 C# 代码正确执行,当前的问题是我不知道客户端正确执行的请求。 data.d.Message 未定义。 data.d 未定义。 data 是一个对象,它有几个字段,比如状态、状态文本和其他一些字段,其中一个只是说“失败”。如果我使用 .Done() 代码永远不会被命中。使用 $.Post() 方法时,我必须使用 .Error() 或 .Always()。

标签: javascript c# jquery ajax json


【解决方案1】:

我认为您的问题是您正在实例化 JsonResult 而不是使用 Json 方法。

大概您拥有的 C# 方法在控制器中,所以不是

return new System.Web.Mvc.JsonResult() { Data = result };

做:

return Json(result);

此方法可能会设置 JsonResult 的其他一些属性,如果未设置,客户端将无法正确接收这些属性。

查看 Microsoft 如何仅向您展示如何通过 MSDN 上的 Json 方法创建 JsonResult

请注意,ViewContentFile 等方法可能也是如此。

【讨论】:

    【解决方案2】:

    整整一周都找不到答案,直到你在某个地方问这个问题......在问这个问题的 30 分钟内,我发现了这个:http://bob.ippoli.to/archives/2005/12/05/remote-json-jsonp/ 这正是我所需要的。

    感谢所有发帖的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-14
      相关资源
      最近更新 更多