$.ajax({
method: "post"
, url: "save.php"
, data: "id=453&action=test"
, beforeSend: function(){
}
, complete: function(){
}
, success: function(html){
$("#mydiv").append(html);
}
});
我已将方法类型设置为发布,但在Save.php中,我只是在$_GET
或$_REQUEST
中获取值,而不是$_POST
中的值。
我的表单如下:
<form method="post" id="myform" action="save.php">
它没有用,在这里和Google上查看,尝试添加enctype
<form method="post" id="myform" action="save.php" enctype="application/x-www-form-urlencoded">
但仍然$_POST
为空?
如何让它发挥作用?
答案 0 :(得分:9)
而不是method: "post"
您需要使用type: "POST"
所以这应该可以在不对表单HTML进行任何更改的情况下运行:
$.ajax({
type: "POST"
, url: "save.php"
, data: "id=453&action=test"
, beforeSend: function(){
}
, complete: function(){
}
, success: function(html){
$("#mydiv").append(html);
}
});
不确定为什么它不起作用但这对我有用:
<强> save.php 强>
<?php
print_r($_POST);
<强> file.html 强>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>Example</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
$('input').click(function() {
$.ajax({
type: "POST"
, url: "save.php"
, data: "id=453&action=test"
, beforeSend: function(){
}
, complete: function(){
}
, success: function(html){
alert(html);
}
});
});
});
</script>
</head>
<body>
<div id="main"><input type="button" value="Click me"></div>
</body>
</html>
你的错误必须在其他地方。
答案 1 :(得分:5)
我也遇到了变量在混合中丢失的问题,并发现在使用重写条件将dir/foo.php
外部重定向到dir/foo
时,Apache正在完全删除POST请求并重定向。
因此,在编写JavasSript时,您必须以可以绕过任何外部重定向的方式引用该文件。
例如。将扩展名称与JavaScript内联。
写
url: "dir/foo"
而不是
url: "dir/foo.php"
我希望这能帮助那些发现此页面的人像我一样。
答案 2 :(得分:4)
为什么不直接拨打jQuery.post()
?
$.post("save.php",
$("#myform").serialize(),
function(html) {
$("#mydiv").append(html);
},
"html"
);
关于jQuery.ajax()
,更改为type: "POST"
而不是method: "POST"
会导致POST
请求正确:
$.ajax({
type: "POST",
url: "test.mhtml",
data: $("#myform").serialize(),
success: function(html){
$('#mydiv').html(html);
}
});
这在Apache日志中显示为:
::1 - - - [30/Oct/2009:09:44:42 -0700] "POST /test.php HTTP/1.1" 200 9 "http://localhost:10501/test.mhtml" "(sic)"
可能的替代问题:
我在找你的问题时找到了this question on StackOverflow。也许不是jQuery给你带来麻烦,它是PHP吗?最高投票的答案有一些确保PHP不干扰的建议,第二个答案提供了一些代码,以查看请求是否实际上是POST
:
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
echo 'POSTed';
}
?>
答案 3 :(得分:3)
**在成功之前在代码中添加以下代码**
key
答案 4 :(得分:0)
我遇到了与$(form).ajaxSubmit()
类似的问题。
浏览器工具表明我已成功发出POST
。在服务器上$_SERVER['REQUEST_METHOD']
也表示POST
,但PHP中的$_POST
变量返回为array(0) { }
。对我来说问题是我实际上提交了一个空表格。只要表单中有数据,$_POST
就会有一些内容(正如您所料!)但更重要的是,if ($_POST) { ... }
开始返回true
。
答案 5 :(得分:0)
对于我来说,解决方案是在Ajax语句的.serialize()
行中添加缺少的data
:
data: $("#form").serialize()