0

如何在不使用 post 的情况下通过 JQuery Get 传递数组

我的jQuery代码是

$('[name="SelectHighlights"]:checked').each(function () {
    var row = $(this).closest('tr');

    var high = {
        AccountName: row.find('td:nth-child(2)').text(),
        Highcomments: row.find('td:nth-child(3) > input').val()
    };
    HighlightsArea.push(high);
});

var HL=HighlightsArea.length;
alert(''+HL);
if(HL>0)
{
    GetJson(
        GetRootPath() + '/WeeklySales/AjaxUpdateHighComments', //url
        //JSON.stringify(HighlightsArea), //Data: 
        //HighlightsArea,
        //{high: HighlightsArea},
        {array: HighlightsArea.join(",")},
        SaveChanges //callBack
    );

}

GetJSON 的功能:

function GetJson(url, data, onSuccess) {
    $.ajax({
        url: url,
        data: data,
        success: onSuccess,
        error: GenericErrorHandler,
        traditional: true,
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        type: 'GET'
    });
}

我的控制器中的代码:

我只想将该数组传递给这个控制器,但我不应该使用 HTTpPost

public ActionResult AjaxUpdateHighComments(List<Highlights> Highlights, WeeklySalesModel weeklysales){}

请帮助我任何形式的帮助都非常感谢。提前致谢。

4

3 回答 3

1

我建议您在传递数据时必须首先将您的 JSON 数组转换为字符串。

客户端

function GetJson(url, data, onSuccess) {
    $.ajax({
        url: url,
        data: JSON.stringify(data), // converted to string
        success: onSuccess,
        error: GenericErrorHandler,
        traditional: true,
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        type: 'GET'
    });
}

试试这个代码到你的

控制器

[HttpGet]
public ActionResult AjaxUpdateHighComments(string highlights)
{
    JavaScriptSerializer jss = new JavaScriptSerializer();
    List<Highlights> listHighlights = jss.Deserialize<List<Highlights>>(highlights);

 ...
于 2013-05-07T09:18:00.123 回答
0

你的问题有点模棱两可,但我会试一试,假设你的意思是你想阻止发布到行动?

您可以在操作上添加一个属性来防止此MSDN HttpGetAttribute

例如

[HttpGet]
public ActionResult AjaxUpdateHighComments(List<Highlights> Highlights, WeeklySalesModel weeklysales){}
于 2013-05-07T05:36:50.160 回答
0

首先,包含本文$.postify中的代码。

代码$.postify

$.postify = function(value) {
    var result = {};

    var buildResult = function(object, prefix) {
        for (var key in object) {

            var postKey = isFinite(key)
                ? (prefix != "" ? prefix : "") + "[" + key + "]"
                : (prefix != "" ? prefix + "." : "") + key;

            switch (typeof (object[key])) {
                case "number": case "string": case "boolean":
                    result[postKey] = object[key];
                    break;

                case "object":
                    if (object[key].toUTCString)
                        result[postKey] = object[key].toUTCString().replace("UTC", "GMT");
                    else {
                        buildResult(object[key], postKey != "" ? postKey : key);
                    }
            }
        }
    };

    buildResult(value, "");

    return result;
};

我知道这个名字听起来像它,POST但它也适用GET。然后更改您的代码如下:

$('[name="SelectHighlights"]:checked').each(function () {
    var row = $(this).closest('tr');

    var high = {
        AccountName: row.find('td:nth-child(2)').text(),
        Highcomments: row.find('td:nth-child(3) > input').val()
    };
    HighlightsArea.push(high);
});

var HL = HighlightsArea.length;
alert('' + HL);
if (HL > 0) {    
    //Property names should match the parameters' name given in the controller method
    var objRequest = {
        Highlights: HighlightsArea,
        weeklysales: {/* weekly sales object goes here */}
    };    
    GetJson(
    GetRootPath() + '/WeeklySales/AjaxUpdateHighComments',
    $.postify(objRequest), // $.postify is the key
    SaveChanges //callBack
    );
}
于 2013-05-07T05:43:01.297 回答