作为Jquery Ajax中的参数

时间:2014-04-15 06:43:14

标签: javascript jquery ajax

是否可以将函数放入Jquery Ajax的参数中,如下所示。 dataType和data作为函数给出。如果返回类型是JSON,则dataType返回值JSON,如果isJson为false,则返回text。

dataVal和dataVar是包含用于构造数据参数的参数名称和值的数组。 data:function的结果将是一个字符串:

{dataVar[0]:dataVal[0],dataVar[1]:dataVal[1],.....,}

我在尝试时遇到错误,所以,只是想知道这种方法是否可行。

function getAjaxResponse(page, isJson, dataVar, dataVal, dfd) {
    $.ajax(page, {
        type: 'POST',
        dataType: function () {
            if (isJson == true) {
                return "JSON";
            } else {
                return "text";
            }
        },
        data: function () {
            var dataString = '{';
            for (var i = 0; i < dataVar.length; i++) {
                dataString = dataString + dataVar[i] + ':' + dataVal[i] + ',';
            }
            console.log(dataString);
            return dataString + '}';
        },
        success: function (res) {
            dfd.resolve(res);
        }
    });
}

修改

根据答案和评论,进行了更改。更新的功能如下。这有效:

function getAjaxResponse(page, isJson, dataVar, dataVal, dfd) {
    $.ajax(page, {
        type: 'POST',
        dataType: isJson ? "JSON" : "text",
        data: function () {
            var dataString ="";
            for (var i = 0; i < dataVar.length; i++) {
                if (i == dataVar.length - 1) {
                    dataString = dataString + dataVar[i] + '=' + dataVal[i];
                } else {
                    dataString = dataString + dataVar[i] + '=' + dataVal[i] + ',';
                }
            }
            return dataString;
        }(),
        success: function (res) {
            dfd.resolve(res);
        }
    });
}

我原来的问题得到了回答。但显然,数据尚未被接受。

数据函数的返回值只被视为参数名称,而jquery只是在请求的末尾添加:如下所示:

{dataVar[0]:dataVal[0]}:

因此,我的服务器无法获取正确的参数名称。

4 个答案:

答案 0 :(得分:2)

来自the manual

  

数据
  键入:PlainObject或String

所以没有。

调用该功能。使用返回值。

data: function () { ... }();
//                       ^^ call the function

答案 1 :(得分:2)

不那样。但它会有一点改变:

(function () {
    if (isJson == true) {
        return "JSON";
    } else {
        return "text";
    }
})()

那应该有用。您只需在创建后立即调用该函数。这样,dataType就是一个String,脚本就可以工作了。 与数据相同。同时使用(function(){})() - 符号

答案 2 :(得分:1)

  

jquery只是添加一个:到请求的末尾,如:

{dataVar[0]:dataVal[0]}:

不,你的devtools显示器确实如此。但是,由于您的数据字符串不包含=符号,并且您将内容发送为application/x-www-form-urlencoded,因此整个正文被解释为它是一个参数名称。

要发送JSON,您应该:

  • 使用contentType: "application/json"
  • 使用data: JSON.stringify(_.object(dataVar, dataVal)) 1

确保使用正确的标头发送有效的JSON(并在服务器上正确识别)。

1:_.objectobject function from Underscore.js,它完全符合您的要求,但您也可以使用IEFE
JSON.stringify(function(p,v){var d={};for(var i=0;i<p.length;i++)d[p[i]]=v[i];return d;}(dataVar, dataVal))

答案 3 :(得分:-1)

您需要使用括号调用该函数,如下所示:

function func1(){
//func1 code in here
}
function func2(func1){
//func2 code in here
//call func1 like this:
func1();
}

所以,你可以像这样使用:

data: function () {
//your stuff her
}(); // which mean you are having data()