【发布时间】:2012-03-16 14:05:00
【问题描述】:
我有一个 .Ajax 方法,它调用后面页面上的方法(执行一些逻辑,然后调用 WCF 服务,然后返回一个对象),如下所示:
$.ajax({
type: 'POST',
url: 'MyPage.aspx/TestMethod',
dataType: "json",
contentType: "application/json",
data: "{'Id': '" + Id + "'}",
success: function (data) {
$("#randomElement").html(data.d.Foo);
},
error: function ((xhr, textStatus, error){
alert(xhr.statusText);
alert(textStatus);
alert(error);
});
还有后面的页面:
[System.Web.Services.WebMethod]
public static MyObject TestMethod(string Id)
{
//Logic removed for readability!
return MyService.GetStuff(Id);
}
这在我的本地机器上运行良好,但在我部署到我的服务器时无法运行。
我已经确定没有调用 page behind 方法(即错误在于调用 TestMethod(),而不是调用服务的 TestMethod())。
我还在 .ajax 方法之前放置了一个警报,以向我显示我所在页面的路径,以防万一它在实时服务器上对 uri 做了一些有趣的事情,并且它以“/MyPage. aspx" 符合我的预期。
我还将“url:”更改为完整的 uri,看看是否有帮助,但没有。
在关闭自定义错误的情况下运行 fiddler 后,我收到以下错误:
{"Message":"线程被中止。","StackTrace":" at System.RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfo 方法、对象目标、Object[] 参数、SignatureStruct& sig、 MethodAttributes methodAttributes, RuntimeType typeOwner)\r\n at System.RuntimeMethodHandle.InvokeMethodFast(IRuntimeMethodInfo 方法, 对象目标、Object[] 参数、签名 sig、MethodAttributes methodAttributes, RuntimeType typeOwner)\r\n at System.Reflection.RuntimeMethodInfo.Invoke(对象 obj,BindingFlags invokeAttr、Binder binder、Object[] 参数、CultureInfo 文化、 Boolean skipVisibilityChecks)\r\n at System.Reflection.RuntimeMethodInfo.Invoke(对象 obj,BindingFlags invokeAttr、Binder binder、Object[] 参数、CultureInfo 文化)\r\n 在 System.Web.Script.Services.WebServiceMethodData.CallMethod(对象 目标,IDictionary
2 parameters)\r\n at System.Web.Script.Services.WebServiceMethodData.CallMethodFromRawParams(Object target, IDictionary2 个参数)\r\n at System.Web.Script.Services.RestHandler.InvokeMethod(HttpContext 上下文、WebServiceMethodData 方法数据、IDictionary`2 rawParams)\r\n 在 System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext 上下文,WebServiceMethodData methodData)","ExceptionType":"System.Threading.ThreadAbortException"}
【问题讨论】:
-
URL 应该是
MyPage.asmx/TestMethod而不是MyPage.aspx/TestMethod? -
当 ajax 请求在服务器上失败时,您从 ajax 请求中得到什么响应?是返回 200、404、500 还是别的什么?
-
@JohnPick 不,调用的是 aspx 网页后面的方法,而不是 asmx 网络服务。
-
@kendaleiv 我已经更新了问题中的代码以显示我已经实施的错误处理(从互联网上找到)。 3 个警报中显示的消息依次为:“错误”、“错误”和“内部服务器错误”。有没有办法获得更好的错误详细信息?
-
您可以使用 Firebug、Chrome 开发者工具或 Fiddler 检查服务器为 ajax 请求返回的内容。