jQuery $ .ajax没有错误消息,服务器响应200 OK

时间:2013-11-15 19:31:07

标签: json jquery

我有一个在本地工作正常的ajax调用,但是当我将它发布到服务器中时,代码永远不会被执行但无论如何都会返回“200 OK”。没有“成功”代码被捕获,也没有“错误”代码。这是我的ajax电话:

$.ajax({
                type: "POST",
                url: "/CargadorContadores.aspx/ObtenerContadores",
                contentType: "application/json; charset=utf-8",
                data: "",
                async: false,
                dataType: "json",
                success: function(data) {
                    var myObj = JSON.parse(data.d);

                    for (var i = 0; i < myObj.length; i++) {
                        var element = document.getElementById("LbItem " + myObj[i].MenuItemID);
                        element.innerHTML = "<b>" + element.innerHTML + " (" + myObj[i].Cantidad + ")</b>";
                    }
                },
                error: function(xhr, status, error) {
                    var err = eval("(" + xhr.responseText + ")");
                    alert(err.Message);
                }
            });
        });

我也尝试将完整的网址放在“网址”字段中,但仍然没有运气。 奇怪的是,当我将完整的url直接放入浏览器时,它仍然没有执行代码。它在当地运作良好!!

我知道有一个类似的帖子(jQuery $.ajax failing silently, no error messages, and server responded with 200 OK),但是没有解决,这在这里疯狂。

PD:这不是跨域的,我的ajax代码在.ascx中,我试图在.aspx上调用方法

非常感谢!!!!

编辑:我尝试删除我的网站项目的System.web.extensions参考,并将dll添加到我的bin中,但它仍然无法正常工作(1.0.61025.0版本)。此外,我在IIS中使用 framework 2.0 运行ASP.NET网站,我的服务器上没有安装框架3.5 (但我在本地工作)。也许那就是问题?由于客户端安全策略,我无法安装它,我该怎么办?

编辑2:我尝试从我的.aspx做一个简单的响应,只是为了测试问题是否在该方法中,但它仍然没有执行成功函数。这是我的.aspx代码:

[WebMethod]
        public static string ObtenerContadores()
        {

            return new JavaScriptSerializer().Serialize("true");
        }

并改编了.ascx

$.ajax({
                    type: "POST",
                    url: "/CargadorContadores.aspx/ObtenerContadores",
                    contentType: "application/json; charset=utf-8",
                    data: "",
                    async: false,
                    dataType: "json",
                    success: function(dictionary) {
                        alert("hello");
                    },
                    error: function(xhr, status, error) {
                        var err = eval("(" + xhr.responseText + ")");
                        alert(err.Message);
                    }
                });
            });

4 个答案:

答案 0 :(得分:0)

这是你的问题:“奇怪的是,当我将完整的url直接放入浏览器时,它仍然没有执行代码。”您的JavaScript期望 - 需要 - JSON响应,并且显然根本没有响应。这不是JavaScript问题,而是.aspx页面的问题。

编辑:根据您的评论,很明显问题是您的.aspx页面没有返回您的预期。因为即使直接转到它,.aspx也不会产生预期的输出,问题出在该页面上,而不是在jQuery中。

假装.aspx生成{}falsetrue。您的success代码将运行,但不会执行任何操作。尝试将alert("Foo");放在那里,看看会发生什么。问题不在于你的jQuery被破坏了;这是因为它没有从.aspx页面获得有意义的输入。

P.S。我建议在你的成功函数中使用data以外的变量名,以防你的.ajax调用中的data对象属性搞砸了。

答案 1 :(得分:0)

好的,我相信我已经弄明白了,所以我发布第二个答案来保留之前的讨论。

这是修复。删除这一行:

contentType: "application/json; charset=utf-8",

在我的测试脚本中,这导致jQuery按预期发送Content-Type标头application/json; charset=utf-8,但请求的实际内容未正确发送为JSON。例如,它不是发送{"foo":"bar"},而是发送foo=bar。因此,接收脚本的行为就好像根本没有发布数据一样。当我在上面注释掉这一行时,我的测试脚本运行正常,并且根据从目标URL收到的值做了我所期望的任何事情。

请注意,这会将您的数据发布为普通的帖子数据。例如,如果您的$.ajax()调用看起来像这样,则发布的数据将包含名为foo的变量和名为who的变量:

$.ajax({
    ...
    data: {foo : "bar",
        who : "what"},
    ...
});

如果您想发布已经序列化的JSON,请执行以下操作:

$.ajax({
    ...
    data: { somevariablename: '{"foo":"bar","who":"what"}' },
    ...
});

然后,您只需解析服务器端的POST参数somevariablename

希望这有帮助!

答案 2 :(得分:0)

如果是VS2012,请尝试添加Mime Type Handler,因为VS2012有IIS express,需要在外部添加Mime类型处理程序, 将以下代码添加到web.config

<system.webServer>
<staticContent>
  <mimeMap fileExtension=".json" mimeType="application/json" />
</staticContent>
</system.webServer>

..如果不是VS2012,请点击此链接

add .json handler support in IIS 7

答案 3 :(得分:0)

我要感谢大家的帮助。 我终于不得不在服务器上安装3.5 Framework,我别无选择。 第二个我安装了它,并更新了web.config dll对3.5的引用,它就像一个魅力。

再次感谢!!!!!