C# .Ajax方法在本地计算机上工作,但在服务器上不工作

C# .Ajax方法在本地计算机上工作,但在服务器上不工作,c#,jquery,asp.net,ajax,C#,Jquery,Asp.net,Ajax,我有一个.Ajax方法,它调用后面页面上的一个方法(执行一些逻辑,然后调用WCF服务,然后返回一个对象),如下所示: $.ajax({ type: 'POST', url: 'MyPage.aspx/TestMethod', dataType: "json", contentType: "application/json", data: "{'Id': '" + Id + "'

我有一个.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方法之前放置了一个警报,向我显示我所在页面的路径,以防它在live server上对uri做了一些有趣的事情,它会像我预期的那样返回为“/MyPage.aspx”

我还将“url:”更改为完整的uri,看看这是否有帮助,但没有


在关闭“自定义错误”运行fiddler后,我得到以下错误:

{“Message”:“线程正在中止。”,“StackTrace”:“at” System.RuntimeMethodHandle.\u InvokeMethodFast(IRuntimeMethodInfo 方法、对象目标、对象[]参数、SignatureStruct和sig, MethodAttributes MethodAttributes,RuntimeType typeOwner)\r\n位于 System.RuntimeMethodHandle.InvokeMethodFast(IRuntimeMethodInfo方法, 对象目标、对象[]参数、签名sig、MethodAttributes methodAttributes,RuntimeType typeOwner)\r\n位于 System.Reflection.RuntimeMethodInfo.Invoke(对象obj,BindingFlags invokeAttr,绑定器绑定器,对象[]参数,CultureInfo区域性, 布尔skipVisibilityChecks)\r\n位于 System.Reflection.RuntimeMethodInfo.Invoke(对象obj,BindingFlags invokeAttr、活页夹、对象[]参数、CultureInfo 区域性)\r\n位于 System.Web.Script.Services.WebServiceMethodData.CallMethod(对象 目标,IDictionary
2个参数)\r\n位于
System.Web.Script.Services.WebServiceMethodData.CallMethodFromRawParams(对象
目标,IDictionary
2个参数)\r\n位于 System.Web.Script.Services.RestHandler.InvokeMethod(HttpContext 上下文,WebServiceMethodData methodData,IDictionary`2 rawParams)\r\n 在 System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext 上下文,WebServiceMethodData methodData)”,“ExceptionType”:“System.Threading.ThreadAbortException”}


在我看来,它似乎没有将正确的参数发布到您的方法中

我从未像您以前在这里那样在.ajax方法中使用过数据选项。我使用:

data: {Id: myId},
其中myId是保存要传递的Id值的变量,不带任何引号


\r\n通常是与编码字符串相关的东西,而这在这里不应该是相关的东西,并且似乎您传递的是字符串数据:“{Id':“+Id+”}”,而不是对象。

在我看来,它似乎没有将正确的参数发布到您的方法中

我从未像您以前在这里那样在.ajax方法中使用过数据选项。我使用:

data: {Id: myId},
其中myId是保存要传递的Id值的变量,不带任何引号


\r\n通常是与编码字符串相关的内容,而这在这里并不相关,而且似乎您传递的是字符串数据:“{Id':'“+Id+”}”,而不是对象。

您的JSON无效;您需要使用双引号:

data: '{"Id": "' + Id + '"}',

您的JSON无效;您需要使用双引号:

data: '{"Id": "' + Id + '"}',

您的服务器是否有“json”?例如,godaddy不提供它

您的服务器是否有“json”?例如,godaddy不提供它

url应该是
MyPage.asmx/TestMethod
而不是
MyPage.aspx/TestMethod
?当ajax请求在服务器上失败时,您从中得到了什么响应?它是否返回一个200404500或其他什么?@JohnPick否,调用的是一个aspx网页隐藏方法,而不是ASMXWeb服务。@kendaleiv我已更新问题中的代码,以显示我已执行的错误处理(从internet上找到)。3个警报中显示的消息依次为:“错误”、“错误”和“内部服务器错误”。有没有办法获得更好的错误详细信息?您可以使用Firebug、Chrome Developer工具或Fiddler检查服务器为ajax请求返回的内容。url应该是
MyPage.asmx/TestMethod
而不是
MyPage.aspx/TestMethod
?当ajax请求在服务器上失败时,您会从中得到什么响应?它是否返回一个200404500或其他什么?@JohnPick否,调用的是一个aspx网页隐藏方法,而不是ASMXWeb服务。@kendaleiv我已更新问题中的代码,以显示我已执行的错误处理(从internet上找到)。3个警报中显示的消息依次为:“错误”、“错误”和“内部服务器错误”。有没有办法获得更好的错误详细信息?您可以使用Firebug、Chrome Developer工具或Fiddler检查服务器返回的ajax请求。我不知道为什么您所拥有的可以在本地机器上工作。这太令人困惑了。我不知道为什么你所拥有的东西会在你的本地机器上工作。那太令人困惑了。