xmlHttpRequest AJAX POST读取MVC控制器中的已发布值

时间:2014-10-22 14:23:01

标签: javascript ajax asp.net-mvc

尽管有大量有用的信息,但仍在努力寻找解决方案。

我有以下Javascript函数正在向我的控制器发送AJAX调用。

        var ajax = new XMLHttpRequest();
        var posts = document.getElementsByClassName('postLink');
        var sendstr = "";
        for (var i = 0; i < posts.length; i++) {
            sendstr += ',';
            sendstr += posts[i].attributes.getNamedItem('onmouseup').value.substr(9, 1);
        }

        ajax.onreadystatechange = function () {
            if (ajax.readyState == 4 && ajax.status == 200) {
                var posts = JSON.parse(ajax.responseText);
                addPostToList(posts.Title, posts.Description, posts.postID);

            }
        }
        ajax.open('POST', '@Url.Action("SAR", "posts")', true);
        ajax.setRequestHeader('Content-type', 'text/plain');
        ajax.setRequestHeader('Content-length', sendstr.length);
        ajax.setRequestHeader('Connection', 'close');
        ajax.send(encodeURIComponent(sendstr));

控制器如下......

    [HttpPost]
    public ActionResult SAR(string r)
    {
        var s = Request.QueryString[0];
        return Content(Post.JSONSerialize());

    }

我已经尝试了许多不同的数据类型作为参数,但仍然没有收到任何使用...我还尝试过Request.Param,request.queryString,request.Form和其他一些“解决方案”我在网上找到它,它只传递一个逗号分隔的整数列表到控制器,存储为一个字符串。如何在将此值发送到控制器时读取该值?

〜我不想要JQuery或JS Framework解决方案,我想要一个原生的Javascript解决方案。

1 个答案:

答案 0 :(得分:6)

1.-使用JSON作为您的内容类型。

2.-您要发回的字符串必须与您在控制器上预期的参数名称相匹配。

将您的发送号码更改为以下格式:

//Where r is the name of your parameter on the controller.
 var sendstr = '{"r":"STRING YOU WANT TO RETURN"}';

然后将您的ajax配置更改为

 ajax.open('POST', '@Url.Action("SAR","Controller")', true);
 ajax.setRequestHeader('Content-Type', 'application/json; charset=utf-8');
 ajax.setRequestHeader('Content-Length', sendstr.length);
 ajax.send(sendstr);

我希望这适合你:)