将JSON对象从客户端传递到服务器

时间:2012-10-30 21:32:08

标签: c# javascript json jquery webmethod

我无法进行客户端站点AJAX调用,然后使用PageMethods将JSON对象响应传递给服务器端来执行某些条件逻辑

从Web服务收到的JSON响应是:

{"Status":"Internal"}

Default.aspx的

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="GoRedirect._Default" %>
<html>
<head>
<title></title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">
</asp:ScriptManager>
   <script type="text/javascript">
        function invokeService() {
            $(document).ready(function () {
                $.ajax({
                    type: "GET",
                    async: "false",
                    url: "http://Domain.Local/InternalCheck/",
                    dataType: "json",
                    success: function (result) {
                        AjaxSucceeded(result);
                    },
                    error: AjaxFailed
                });
            });
        }
        function AjaxSucceeded(result) {
            var objJSON = result.Status;
            PageMethods.GetJSONResponse(objJSON);
        }
        function AjaxFailed(result) {
            alert(result.status + ' ' + result.statusText);
        }
        invokeService();
    </script>
</form>

Default.aspx.cs

namespace GoRedirect
{
public partial class _Default : Page
{
    [Serializable]
    public class ServerJSON
    {
        public string Status { get; set; }
    }

    [WebMethod]
    public static string GetJSONResponse(string objJson)
    {
        try
        {
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            string JSONResponse = serializer.Serialize(objJson);
            return JSONResponse;
        }
        catch(Exception errorException)
        {
            return errorException.ToString();
        }

    }

    public void Page_Load(object sender, System.EventArgs e)
    {
        If (JSONResponse.Status == "Internal")
        {
        //Do something
        }
    }
}
}   

1 个答案:

答案 0 :(得分:0)

看看戴夫沃德的这篇文章:http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/

看起来你需要使用POST而不是GET,正如Vincent所说,以及一个空的数据参数和内容类型:

$(document).ready(function () {
                $.ajax({
                    type: "POST",
                    async: "false",
                    url: "http://Domain.Local/InternalCheck/",
                    dataType: "json",
                    data: "{}",
                    contentType: "application/json; charset=utf-8",
                    success: function (result) {
                        AjaxSucceeded(result);
                    },
                    error: AjaxFailed
                });
            });