【问题标题】:JQuery AJAX Error in Firefox on Mac with "Managed" Users带有“托管”用户的 Mac 上的 Firefox 中的 JQuery AJAX 错误
【发布时间】:2011-07-05 16:09:29
【问题描述】:

我在 Mac (OS-10.5) 上的 Firefox(3.6.13 到 4.x)中遇到 JQuery AJAX 调用问题。仅当用户为“受家长控制管理”时才会出现此问题。 “标准”或“管理员”用户不会发生这种情况,任何用户都不会在 Safari 或 Chrome 中发生这种情况。在 Windows 环境中的任何地方都不会出现此问题。

我有一个简单的 ASP.NET 页面 (ASPX),它调用一个简单的 ASP.NET Web 服务 (ASMX)。返回的错误信息是:

异常类型:System.ArgumentException 消息:传入的对象无效,应为“:”或“}”。 (23): { '数据' : '某事'Pr 堆栈跟踪:位于 System.Web.Script。 System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth) 在 System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer) 在 System. Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](String input) at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)

此错误发生在 JSON 反序列化期间,实际上并没有出现在服务方法中。请注意,在传递的 JSON 对象中插入了字母“Pr”,并且省略了尾随花括号(从而导致错误):“ { 'data' : 'something'Pr”。当我在 Firebug 中检查帖子时,字母“Pr”没有出现在帖子中。

对我来说,这看起来像是 Firefox 中的一个错误。有什么想法吗?

代码如下:

网络服务:

using System;
using System.Web;
using System.Web.Services;

namespace TestWebApp
{
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    [System.Web.Script.Services.ScriptService]
    public class MacAjaxTestService : System.Web.Services.WebService
    {
        [WebMethod]
        public string TestServiceCall(string data)
        {
            return "Data Received = '" + data + "'.";
        }
    }
}

ASPX 页面:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="MacAjaxTest.aspx.cs" Inherits="TestWebApp.MacAjaxTest" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>MAC AJAX TEST</title>
    <script language="javascript" type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.5.1.min.js"></script>
    <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.9/jquery-ui.min.js"></script>
    <script type="text/javascript" language="javascript">

        $(function ()
        {
            $("#TestButton").button().click(TestButton_Click);
            $("#TestText").focus();
            $("#ResultsDiv").text("").css({ "border": "solid 1px #999999", "width": "600px", "min-height": "100px" });
        });

        function TestButton_Click()
        {
            $("#ResultsDiv").text("");
            $.ajax({
                type: "POST",
                contentType: "application/json; charset=utf-8",
                url: "MacAjaxTestService.asmx/TestServiceCall",
                data: "{ 'data' : '" + $("#TestText").val() + "' }",
                dataType: "json",
                success: function (data)
                {
                    $("#ResultsDiv").text(data.d);
                },
                error: function (jqXHR, textStatus, errorThrown)
                {
                    //be sure customErrors mode="Off" in web.config.
                    var error = $.parseJSON(jqXHR.responseText);
                    var msg = "Exception Type: " + error.ExceptionType + "<br />"
                        + "Message: " + error.Message + "<br />";

                    if (error.StackTrace != null && error.StackTrace.length > 0)
                        msg += "Stack Trace: " + error.StackTrace;

                    $("#ResultsDiv").html(msg);
                }
            });
        }

    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <h2>MAC AJAX TEST</h2>
        <br />
        <input type="text" id="TestText" />
        <input type="button" id="TestButton" value="Test" />
        <br /><br /><br />
        Results:
        <br />
        <div id="ResultsDiv"></div>
    </div>
    </form>
</body>
</html>

【问题讨论】:

  • 我刚刚遇到了同样奇怪的错误。显然 XHR 中 POST 正文的最后两个字母总是被Pr 替换。怎么回事?!这方面有什么进展吗?
  • 这方面没有进展。如下所述,这似乎是一个长期存在的 Firefox 错误。我们刚刚向我们的支持小组提供了一份技术说明,建议使用不同的浏览器。 Mac 上的 Safari 运行良好。
  • Pumbaa80 提供的链接中有一些解决方法。一些包括:使用 SSL;添加一个虚拟字段(仅在您处理 HTML 表单时才有效);并手动填充发布数据客户端,然后剥离填充服务器端。此外,较新版本的 Mac OS 10.6 和更新版本似乎没有此问题。

标签: jquery ajax macos firefox


【解决方案1】:

看起来这是 Firefox / MacOS 中长期存在的错误

https://bugzilla.mozilla.org/show_bug.cgi?id=489575

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    • 1970-01-01
    • 2023-03-29
    相关资源
    最近更新 更多