【问题标题】:.Ajax method works on local machine, but not on server.Ajax 方法适用于本地机器,但不适用于服务器
【发布时间】: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(对象 目标,IDictionary2 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 请求返回的内容。

标签: c# jquery asp.net ajax


【解决方案1】:

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

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

【讨论】:

  • 而且我不知道为什么您拥有的内容可以在本地计算机上运行。这令人困惑。
【解决方案2】:

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

我从来没有像你以前那样在 .ajax 方法中使用过 data 选项。我用:

data: {Id: myId},

其中 myId 是保存要传递的 Id 值的变量 - 不带任何引号。

\r\n 通常与编码字符串有关,这在此处不应该相关,并且您似乎正在传递字符串数据:"{'Id': '" + Id + "' }" 而不是一个对象。

【讨论】:

    【解决方案3】:

    你的服务器有“json”吗?例如,godaddy 不提供它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-11
      • 1970-01-01
      • 2013-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-16
      相关资源
      最近更新 更多