Ajax方法在本地机器上工作,但在服务器上不工作
本文关键字:工作 服务器 机器 方法 Ajax | 更新日期: 2023-09-27 18:25:49
我有一个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":"位于System.RuntimeMethodHandle_InvokeMethodFast(IRuntimeMethodInfo方法,Object目标,Object[]参数,SignatureStruct&sig,MethodAttributes MethodAttributes,RuntimeType typeOwner)''r''n位于System.RuntimeMethodHandle.IInvokeMethodFast(IRuntimeMethodInfo方法,Object target,Object[]arguments,Signature sig,MethodAttributesmethodAttributes,RuntimeType typeOwner)''r''n位于System.Reflection.RuntimeMethodInfo.IInvoke(Object obj,BindingFlagsinvokeAttr,Binder绑定器,Object[]参数,CultureInfo区域性,布尔skipVisibilityChecks)''r''nSystem.Reflection.RuntimeMethodInfo.IInvoke(Object obj,BindingFlagsinvokeAttr,Binder绑定器,Object[]参数,CultureInfo区域性)''r''nSystem.Web.Script.Services.WebServiceMethodData.CallMethod(对象目标,IDictionary
2 parameters)'r'n at System.Web.Script.Services.WebServiceMethodData.CallMethodFromRawParams(Object target, IDictionary
2个参数)''r''nSystem.Web.Script.Services.RestHandler.InvokeMethod(HttpContext上下文,WebServiceMethodData methodData,IDictionary `2 rawParams)''r''n在System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext上下文,WebServiceMethodDatamethodData)","ExceptionType":"System.Threading.ThreadException"}
您的JSON无效;你需要使用双引号:
data: '{"Id": "' + Id + '"}',
对我来说,它似乎没有向您的方法发布正确的参数。
我从未像您在这里那样在.ajax方法中使用过数据选项。我使用:
data: {Id: myId},
其中myId是包含要传递的Id值的变量,不带任何引号。
''r''n通常是与编码字符串有关的东西,而这在这里不应该是相关的东西,并且似乎您传递的是字符串数据:"{'Id':'"+Id+"'}"而不是对象。
您的服务器有"json"吗?例如,godaddy不提供