我有一个ID为“#ajaxform”的表单。如果我发送一个数据为formData = {id: 'something'};
的ajax请求,一切正常,服务器将数据作为POST。但是,如果我发送带有数据formData = $(this).serialize();
的ajax请求,则服务器不会接收任何数据。
请参阅下面的我的ajax代码。
$("#ajaxform").submit(function(e){
e.preventDefault(); // avoid to execute the actual submit of the form.
// add loading image to div
$('#ajaxchanger').html('<?php echo __('loading...'); ?>');
//var formData = {id: 'something'}; // if I call the ajax with this data instead the next line, it works!
var formData = $(this).serialize();
var formURL = $(this).attr("action");
$.ajax({
type: "POST",
cache: false,
dataType: "html",
data: formData,
processData: true,
url: formURL,
success: function (data, textStatus, jqXHR) {
// replace div's content with returned data
$('#ajaxchanger').html(data);
},
error: function(jqXHR, textStatus, errorThrown) {
alert("An error occurred: " + jqXHR.responseText.message);
console.log(jqXHR);
}
});
});
有什么想法吗?
答案 0 :(得分:0)
将.serialize()
编码为一组表单元素作为提交字符串 。默认情况下,$ .ajax使用GET
数据类型来提交数据。所以我们假设你有一个字符串name=yourname&email=youremail@example.com
,网址是//example.com/request_handler
那么你的网址变为GET
方法是:
http://example.com/request_handler?name=yourname&email=youremail@example.com
根据GET METHOD,这是完美的。
对于POST
,它是相同的,因为根据.serialize()文档,它将表单元素设为字符串。因此POST
数据类型不适用于.serialize()
。要进行更多deply调试,请在浏览器控制台中查看请求。
答案 1 :(得分:0)
以下行有PHP错误。
$('#ajaxchanger').html('<?php echo __('loading...'); ?>');
改变如
$('#ajaxchanger').html('<?php echo __("loading..."); ?>');
我测试了代码和良好的结果。
使用&#34;语法识别&#34;编辑。您可以避免这种语法错误。