从JavaScript调用C#方法并返回JSON

从JavaScript调用C#方法并返回JSON,javascript,c#,json,webmethod,Javascript,C#,Json,Webmethod,我试图让JavaScript与C#一起工作。现在,我只是尝试从C#中检索(获取)一个返回结果,并通过JavaScript显示它。稍后,它将用于数据库写入(POST)。就像这样,读完之后,我就陷入了困境: 我有按钮: <button id="btn" onclick="Create();">CREATE</button> 然后C#WebMethod: [WebMethod] public static string Create() { return "WebMe

我试图让JavaScript与C#一起工作。现在,我只是尝试从C#中检索(获取)一个返回结果,并通过JavaScript显示它。稍后,它将用于数据库写入(POST)。就像这样,读完之后,我就陷入了困境:

我有按钮:

<button id="btn" onclick="Create();">CREATE</button>
然后C#WebMethod:

[WebMethod]
public static string Create()
{
    return "WebMethod";
}
那么,如何在“onreadystatechange”上获得“WebMethod”值呢?让所有数据都变成JSON?不需要为我编写代码,只要给我指出正确的方向,就像我在概念上失败的地方一样,因为我以正确的方式阅读了许多相互矛盾的观点。没有jQuery。

要从java脚本调用C#方法,必须使用ajax。下面是一个如何从java脚本或jquery调用c#方法的示例


这可以为您与jQuery的结合提供一个起点:

/*test.html*/

<script>
    function Create() {
        // create some data object here
        var data = {
            value1: 'string 1',
            value2: 'string 2',
            value3: 'string 3'
        };

        // post data to c# web service (web method)
        $.ajax({
            url: 'default.aspx/processData', // the path to the *.aspx-file has to correct here!
            type: 'POST',
            dataType: 'json',
            contentType: 'application/json; charset=utf-8',
            data: JSON.stringify({ formData: data }),
            async: true,
            success: function (msg, status) {
                console.log(msg.d);
            },
            failure: function (data) {
                console.log(msg.d);
            },
            error: function (jqXHR, textStatus, errorThrown) {
                console.log(textStatus + " : " + errorThrown);
            }
        });
        return false;
    }
</script>
<button onclick="Create();">Create</button>
<%@ Page Language="C#" Src="default.aspx.cs" Inherits="main" %>
using System;
using System.Web.Services;
using System.Web.UI;

public class main : Page {
    protected void Page_Load(object sender, EventArgs e) { }

    [WebMethod]
    public static string processData(FormData formData) {
        //access your data object here e.g.:
        string val1 = formData.value1;
        string val2 = formData.value2;
        string val3 = formData.value3;

        return val1;
    }

    // the FormData Class here has to have the same properties as your JavaScript Object!
    public class FormData {
        public FormData() { }

        public string value1 { get; set; }
        public string value2 { get; set; }
        public string value3 { get; set; }
    }
}

为什么返回false?用于防止回发,但如果没有,仍然不起作用。我也把问题删掉了。谢谢。你想做什么,只是打一个ajax电话?是的,我现在正试图从C#方法得到响应。将来,我想用JSON向JS/C#发送/接收JSON中的JS/C#。您使用的是jquery还是严格意义上的JS?我希望不使用jquery。如何在JavaScript中检索来自C#WebMethod的返回值?在C#method中,使用json编码并返回。接收变量将采用json格式。它返回整个文档。我想我需要返回一些http响应。奇怪的是,我没有System.Runtime.Serialization.Json命名空间来帮助我编码它。我不想安装任何软件包。为什么返回“return[WebMethod]”它应该是“return somestringvariable”它只是一个字符串,不管里面有什么文本。我返回一个字符串。它不工作,总是给出内部服务器错误(来自ajax的错误回复)。他返回的是一个字符串而不是json。“数据类型”应为“文本”
using System;
using System.Web.Services;
using System.Web.UI;

public class main : Page {
    protected void Page_Load(object sender, EventArgs e) { }

    [WebMethod]
    public static string processData(FormData formData) {
        //access your data object here e.g.:
        string val1 = formData.value1;
        string val2 = formData.value2;
        string val3 = formData.value3;

        return val1;
    }

    // the FormData Class here has to have the same properties as your JavaScript Object!
    public class FormData {
        public FormData() { }

        public string value1 { get; set; }
        public string value2 { get; set; }
        public string value3 { get; set; }
    }
}