【问题标题】:Why is Web Service failing to return proper JSON?为什么 Web 服务无法返回正确的 JSON?
【发布时间】:2014-03-07 12:58:59
【问题描述】:

我调用 Web 服务并返回 JSON 字符串的 asmx 页面,但我的 jQuery 帖子失败了,我不知道为什么?

                    $.post("/DesktopModules/EastlinkMilestones/MilestonesService.asmx /InsertYear_Decade",
                {   Year: $('#txtYear_Decade').val(),
                    IsDecade: $('#chkIsDecade').prop('checked')
                },
                function (data)
                {
                    Current_Edit_State == EDIT_STATE.UPDATE;
                    successMessage.text('Year/Decade created successfully.');
                    informationMessage.css('display', 'none');
                    successMessage.css('display', 'block');                        
                },
                "json"
                )
                 .done(function(data) {
                    alert( "second success" );
                    alert( JSON.stringify(data));
                    })
                 .fail(function(jqXHR, textStatus, errorThrown) {                     
                     alert( "error" );
                     alert( JSON.stringify(jqXHR));
                     alert(textStatus);
                     alert(errorThrown);
                    })
                 .always(function() {
                    alert( "finished" );
                 });

.ASMX 方法

[WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public string InsertYear_Decade()
    { var Request = HttpContext.Current.Request;
        var Response = HttpContext.Current.Response;

                    var js = new JavaScriptSerializer();

                string mileStoneData = js.Serialize(data);

                return mileStoneData; // {"ID": 20, "Year": "2013", "IsDecade": false }
            }
    }

web 方法总是失败,它的 textStatus = parsererror 和 errorThrown = Invalid Character?

【问题讨论】:

  • JSON 文本实际上是什么样的?
  • JSON文本在return语句后注释
  • 如果您按照我发布的链接中的步骤操作,您是否看到服务器的预期响应?

标签: c# jquery json web-services


【解决方案1】:

您不需要返回值,只需在响应中写入即可。试试这样的:

JavaScriptSerializer serializer = new JavaScriptSerializer();
Response.ContentType = "application/json";
Response.Write(serializer.Serialize(data));

【讨论】:

    【解决方案2】:

    您应该直接返回对象,而不是返回类型 string。无需使用 JavascriptSerializer,并在您的 jquery 帖子中将您的 contentType 设置为 application/json

    【讨论】:

      猜你喜欢
      • 2018-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-29
      • 1970-01-01
      • 1970-01-01
      • 2016-11-05
      • 1970-01-01
      相关资源
      最近更新 更多