成功的$.Ajax和$.Post调用总是从C#返回失败

Succesfull $.Ajax and $.Post calls always return failure from C#

本文关键字:返回 失败 调用 Ajax Post 成功      更新时间:2023-09-26

我需要一个跨域的web api方法来向C#中的一些javascript返回有效的jsonp。我似乎无法让这种魔术发生。我在网上到处找,找不到一个从头到尾的例子来满足我的需求和工作。。。Fiddler显示我返回了有效的json数据,但当我在F12开发工具或firebug中遇到断点时,结果是一条失败消息。

以下是我目前拥有的:

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(),得到了相同的结果。

我做错了什么???

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

假设你的C#方法在控制器中,所以不是

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

do:

return Json(result);

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

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

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

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

感谢所有发帖的人。