【发布时间】: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