不能使用AJAX将json或文本发送到c#后台代码

本文关键字:代码 后台 文本 AJAX json 不能 | 更新日期: 2023-09-27 18:12:08

我有一个AJAX代码,我试图将一些数据发送到c#代码中的方法

我试着用文本数据类型和json数据类型发送他们,但他们都没有和我一起工作。

当我使用json类型时,它返回以下错误:

内部服务器错误

和使用text me时方法,没有出现错误,代码通过success函数,但实际数据从未发送到代码隐藏类

的方法。这是使用json类型的ajax代码:
function searchClicked(sCriterion) {
        $.ajax({
            type: "POST",
            url: "TokenRegistration.aspx/GetSearchCritetrion",
            data: "{creiterion : " + sCriterion + " }",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                alert("Request: " + XMLHttpRequest.toString() + "'n'nStatus: " + textStatus + "'n'nError: " + errorThrown);
            },
            success: function (result) {
                alert("We returned: " + result);
            }

这是使用文本格式的ajax代码:

function searchClicked(sCriterion) {
        $.ajax({
            type: "POST",
            url: "TokenRegistration.aspx/GetSearchCritetrion",
            data: sCriterion,
            contentType: "application/text; charset=utf-8",
            dataType: "text",
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                alert("Request: " + XMLHttpRequest.toString() + "'n'nStatus: " + textStatus + "'n'nError: " + errorThrown);
            },
            success: function (result) {
                alert("We returned: " + result);
            }

这里还有我的代码隐藏方法,数据应该被发送到:

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public void GetSearchCritetrion(object selectedItem)
{
    var json = new JavaScriptSerializer();
    var data = json.Deserialize<Dictionary<string, Dictionary<string, string>>[]>(selectedItem.ToString());
}

我在另一个项目中使用了完全相同的ajax代码,它工作完美,但在这里我没有得到错误的地方,所以有什么建议吗?

不能使用AJAX将json或文本发送到c#后台代码

看看是否有效而不是发送对象,尝试传递字符串

data: JSON.stringify({selectedItem : sCriterion }),

背后的代码
public void GetSearchCritetrion(string selectedItem)

这是一个非常简单的示例,将JSON发送到控制器方法,该方法将其转换为对象,然后返回响应。

HTML:

<button id="go" class="btn">Go</button>

JS:

    var obj = { foo: 123, bar: "abc " };
    $('#go').click(function () {
        $.ajax({
            contentType: 'application/json; charset=utf-8',
            dataType: 'json',
            type: 'POST',
            url: '/Test/TestJson',
            data: JSON.stringify(obj),
            success: function (response) {
                alert(response.result)
            },
            failure: function (response) {
                alert('fail');
            }
        });
    });

控制器:

public class TestController : Controller
{
    [OutputCache(Location = OutputCacheLocation.None)]
    public JsonResult TestJson(TestClass tc)
    {
        return Json(new { result = "foo=" + tc.foo + " bar=" + tc.bar }, JsonRequestBehavior.AllowGet);
    }
    public class TestClass
    {
        public int foo { get; set; }
        public string bar { get; set; }
    }
}

我想这对你有帮助。

class Item 
{
    public int id { get; set; }
}
[WebMethod]
public static void GetSearchCritetrion(Item selectedItem)
{
    //ToDo: selectedItem.id
}