【问题标题】:(JSON.stringify) ---> (asp.net function) ----> (JSON.parse) ---->Microsoft JScript runtime error: Invalid character(JSON.stringify) ---> (asp.net function) ----> (JSON.parse) ---->Microsoft JScript runtime error: Invalid character
【发布时间】:2012-05-22 05:30:42
【问题描述】:

我有一个简单的 javascript 对象。我用 JSON.stringify 对其进行序列化,然后将它发送到一个只返回它的 asp.net Web 函数。但是当我尝试用 JSON 解析返回的字符串时,我得到了

Microsoft JScript 运行时错误:无效字符

 $(document).ready(function() {
          $.ajax({
              type: "POST",
              url: "test.aspx/PassBackdata",
              contentType: "application/json; charset=utf-8",
              data: "{'args': '" + JSON.stringify(MyObject) + "'}",
                   dataType: "json",
                   success: AjaxSucceeded,
                   error: AjaxFailed
               }); 
           });
           function AjaxSucceeded(result) {

            var a=JSON.parse(result);

           }
           function AjaxFailed(result) {
               alert(result.status + ' ' + result.statusText);
           }  


      };




  <System.Web.Services.WebMethod()> _
    Public Shared Function PassBackdata(args As String)
            Return args
     End Function

我该如何解决这个问题?谢谢

【问题讨论】:

    标签: asp.net json serialization


    【解决方案1】:

    如果错误发生在 succes 函数上,您可能需要检查结果对象的格式。我不得不使用var a=JSON.parse(result.d);,因为这是webservice返回的方式,它不是直接的json,而是一个带有“d”字段的对象,即json。

    为了检查结果,我使用 fiddler。

    【讨论】:

    • 我也经历过!奇怪!
    【解决方案2】:

    代替:

    "{'args': '" + JSON.stringify(MyObject) + "'}"
    

    试试这个:

    JSON.stringify({args: MyObject})
    

    不要自己做 JavaScript 能为你做的事情;)

    【讨论】:

      【解决方案3】:

      不过,了解 MyObject 的样子会有所帮助:

      JSON 的键名必须用双引号,而不是单引号。试试这样的:

      $(document).ready(function() {
                $.ajax({
                    type: "POST",
                    url: "test.aspx/PassBackdata",
                    contentType: "application/json; charset=utf-8",
                    data: JSON.stringify({args:MyObject}),
                         dataType: "json",
                         success: AjaxSucceeded,
                         error: AjaxFailed
                     }); 
                 });
                 function AjaxSucceeded(result) {
      
                  var a=JSON.parse(result);
      
                 }
                 function AjaxFailed(result) {
                     alert(result.status + ' ' + result.statusText);
                 }  
      
      
            };
      

      【讨论】:

      • with data: JSON.stringify({args:MyObject}) 我得到一个错误 500 错误内部服务器。奇怪的是我发送的字符串和我收到的完全一样。我不明白无效字符错误消息。
      • with data: JSON.stringify({args:MyObject}) 我得到一个错误 500 错误内部服务器。奇怪的是我发送的字符串和我收到的完全一样。我不明白无效字符错误消息。如果我立即进行字符串化和解析,所有工作都可以正常工作。如果我将字符串发回给 asp.net 函数,并且函数将其发回,因为它是接收到的字符串,即使它看起来相同,也无法用 JSON 解析它可能与 utf-8 相关,做一些改变它
      【解决方案4】:

      如果我这样做:JSON.parse(result.d) 而不是 JSON.parse(result) 它可以工作。

      function AjaxSucceeded(result) {
      
          var a=JSON.parse(result.d);
      
      }
      

      不知道为什么

      【讨论】:

        猜你喜欢
        • 2017-04-28
        • 1970-01-01
        • 1970-01-01
        • 2014-07-06
        • 1970-01-01
        • 2018-03-10
        • 1970-01-01
        • 1970-01-01
        • 2017-06-28
        相关资源
        最近更新 更多