jQuery中是否有一个简单的非AJAX POST方法?
我正在寻找与页面上的表单相当的东西,只有通过JavaScript设置隐藏字段,然后获得POST,导致浏览器通过action
加载页面集。只是一个普通的POST,但是通过jQuery设置了值。
我想我可以继续实现我当前的方法,但我很好奇jQuery是否提供了一种快速方法。在后台,我想它会动态创建包含所有隐藏值的表单并提交它。
答案 0 :(得分:38)
没有任何内置功能。您可以创建一个动态表单,用隐藏字段填充它,将其添加到DOM并触发提交。这是一个例子:
function submit(action, method, values) {
var form = $('<form/>', {
action: action,
method: method
});
$.each(values, function() {
form.append($('<input/>', {
type: 'hidden',
name: this.name,
value: this.value
}));
});
form.appendTo('body').submit();
}
submit('http://www.example.com', 'POST', [
{ name: 'key1', value: 'value1' },
{ name: 'key2', value: 'value2' },
{ name: 'key3', value: 'value3' },
]);
答案 1 :(得分:36)
稍微整理达林的优秀解决方案。
function myFunction(action, method, input) {
'use strict';
var form;
form = $('<form />', {
action: action,
method: method,
style: 'display: none;'
});
if (typeof input !== 'undefined' && input !== null) {
$.each(input, function (name, value) {
$('<input />', {
type: 'hidden',
name: name,
value: value
}).appendTo(form);
});
}
form.appendTo('body').submit();
}
这是兼容JSLint的,并确保尽管可能有css定义,但在body标记的末尾没有显示任何表单。用法也稍微简单明了,例如:
myFunction('/path/to/my/site/', 'post', {
id: 1,
quote: 'Quidquid Latine dictum sit altum videtur'
});
答案 2 :(得分:7)
我发现这些答案非常有用,并修改了Anssi Herranen的解决方案,也正确地将数组发布到服务器端php:
function jqueryPost(action, method, input) {
"use strict";
var form;
form = $('<form />', {
action: action,
method: method,
style: 'display: none;'
});
if (typeof input !== 'undefined') {
$.each(input, function (name, value) {
if( typeof value === 'object' ) {
$.each(value, function(objName, objValue) {
$('<input />', {
type: 'hidden',
name: name + '[]',
value: objValue
}).appendTo(form);
} );
}
else {
$('<input />', {
type: 'hidden',
name: name,
value: value
}).appendTo(form);
}
});
}
form.appendTo('body').submit();
}
答案 3 :(得分:2)
作者要求提供jQuery解决方案,但这可以通过纯JavaScript 轻松完成:
function post (action, nameValueObj){
var form = document.createElement("form");
var i, input, prop;
form.method = "post";
form.action = action;
for (prop in nameValueObj) { // Loop through properties: name-value pairs
input = document.createElement("input");
input.name = prop;
input.value = nameValueObj[prop];
input.type = "hidden";
form.appendChild(input);
}
//document.body.appendChild(form); <-- Could be needed by some browsers?
form.submit();
return form;
}
// Example usage:
post("actionPage.html", {
"field1": "hello",
"field2": "world"
/* etc. */
});
答案 4 :(得分:-4)
我认为你可以使用类似的东西:
paramters = {key1: 'value1', key2: 'value2'}
jQuery.ajax({
url:'/your/url',
data: jQuery.param(paramters),
async:false,
type:'POST',
success: function(result){
doSomethingWithYourResult(result);
}
})
请注意'async = false'设置