是否可以将函数放入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]}:
因此,我的服务器无法获取正确的参数名称。
答案 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:_.object
是object
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()