gpt4 book ai didi

javascript - JQuery 表单插件向 Node.js 发送空数据?

转载 作者:行者123 更新时间:2023-12-02 17:28:31 24 4
gpt4 key购买 nike

html 表单:

<form id="importForm" enctype="multipart/form-data">

<p>
<label for="ownerName">Owner Name<pow
class="requiredFormItem">&nbsp;*</pow></label><select id="ownerName"
name="ownerName"></select>
</p>
<p>
<label for="policyName">Policy Name<pow
class="requiredFormItem">&nbsp;*</pow></label><select id="policyName"
name="policyName"></select>
</p>
<p>
<label for="partition">Custom Partition Name</label> <input
type="text" name="partition" id="partition" class="textField" />
</p>
<p>
<pow class="requiredFormItem">*&nbsp;</pow>
Required Fields
</p>
<p>
<input type="submit" id="importCampaignButton" class="submit"
value="Import" />
</p>
</form>

JavaScript:

function importObject(){
var options = {
target: '#importForm',
type: 'POST',
url: hostServer + '/import',
beforeSubmit: ShowRequest,
success: function () {
displayMessageDialog("File imported successfully", true);
},
error: function(e){
displayMessageDialog("An AJAX error occured. " + JSON.stringify(e));
}
};
$('#importForm').ajaxForm(options);
//$('#importForm').ajaxSubmit(options);
}

function ShowRequest(formData, jqForm, options) {
var queryString = $.param(formData);
alert('BeforeSend method: \n\nAbout to submit: \n\n' + queryString);
return true;
}

$(function() {
importObject();
});

当点击提交时,它告诉我:

 About to submit: ownerName=161&policyName=Global+Policy&partition=

在 Node.js 上:

我正在收听 URL 上的帖子...

app.post('/import', campaigns.importCampaign2);

和打印...

exports.importCampaign2 = function (request, response){
utilities.debugLog('Import campaign...');
utilities.debugLog('request files? ' + request.files);
utilities.debugLog('request body? ' + JSON.stringify(request.body));
utilities.debugLog('request params? ' + JSON.stringify(request.params));
utilities.debugLog('request query? ' + JSON.stringify(request.query));

但我似乎什么也没得到......

request files? undefined
request body? {}
request params? {}
request query? {}

我正在尝试制作一个带有文件上传的表单,但它必须与 IE 9 兼容,所以我不能使用 html5。如果我执行 ajaxSubmit(options),JQuery 表单插件就可以工作,但是返回的文件是...一个字符串“[file Object]”和一个正文参数,而不是文件参数...猜测是必须发送的表单,所以我我正在尝试其他方式,希望它能发送实际的文件。但它不再发送任何内容...

app.js 设置:

app.set('port', process.env.PORT || 3333);
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.set('view options', {layout: false});
app.use(require('morgan')('dev'));
app.use(require('body-parser')({ keepExtensions: true}));
app.use(require('cookie-parser')());
app.use(require('express-session')({ secret: 'mySecret', store: new MemoryStore({ reapInterval: 600000}) }));
app.use(require('method-override')());
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
next();
});
app.use(express.static(path.join(__dirname, '/public')));
app.all('*', function (req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
next();
});

@mscdex 有趣!它确实发送了一些东西!禁用 body-parser 将是一个真正的麻烦,但有了它,我看到了我的值(value)观:

------WebKitFormBoundaryJo01BR3yUDBh094k
Content-Disposition: form-data; name="ownerName"

161
------WebKitFormBoundaryJo01BR3yUDBh094k
Content-Disposition: form-data; name="policyName"

Global Policy
------WebKitFormBoundaryJo01BR3yUDBh094k
Content-Disposition: form-data; name="partition"


------WebKitFormBoundaryJo01BR3yUDBh094k--

最佳答案

现在,您需要使用 Express 4 的多部分解析模块来处理多部分/表单数据请求。此类模块的一些示例包括: busboy (/connect-busboy/multer/reformed ) 和 formidable .

原因是在 Express 4 中, bodyParser() 中间件被提取到自己的模块( body-parser )中,但该新模块现在仅支持 application/json 和 application/x-www-form-urlencoded ,所以你有单独使用另一个模块进行多部分/表单数据处理。

关于javascript - JQuery 表单插件向 Node.js 发送空数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23295660/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com