我的文件中有一个简单的js脚本,名为 index.php :
$.ajax({
type: "POST",
data: 'a='+hi+'&b='+hello,
url: "update.php",
cache: false,
success: function() {
console.log('Ajax success');
},
error: function() {
console.error('Ajax error');
},
complete: function() {
console.log('Ajax complete');
}
});
在我看到我的控制台时,我收到了两条消息:成功并完成。
2 vars a 和 b 包含一些内容。我想将这些数据发送到名为 update.php 的文件中,其中包含:
$a = @$_POST['hi'];
$b = @$_POST['hello'];
在我的update.php文件中,如果我执行了echo $a;
,它就无法正常工作(没有任何内容)。如果我执行var_dump($_POST);
,则会返回:
array (size=0)
empty
这两个文件在我的网络服务器上运行正常,但在我的本地工作流程中没有任何作用。
我不确定我的$a = @$_POST['hi'];
。我尝试使用$a = $_POST['hi'];
,但它返回:Undefined index: hi
(同样适用于"你好")。
这意味着$ a和$ b为NULL但在我的 index.php 文件中,2个变量包含我的东西。
有任何想法如何解决这个问题? Thx提前。
答案 0 :(得分:3)
@
可以抑制错误。这并不能让它神奇地起作用。您仍然会收到“未定义索引”错误,但它不再显示。
我认为问题在于传递数据的方式。尝试将其作为对象传递:
$.ajax({
type: "POST",
data: {
a: hi, /* 'a' is the key, 'hi' is the value. */
b: hello },
url: "update.php",
cache: false,
success: function() {
console.log('Ajax success');
},
error: function() {
console.error('Ajax error');
},
complete: function() {
console.log('Ajax complete');
}
});
除了在PHP中使用var_dump($_POST);
转储已发布信息的全部内容外,您还可以使用浏览器中的开发人员工具(通常在F12下)来检查发布的请求。
如果你使用这些调试工具,那么你可能会注意到你发了键'a'和'b',同时读了'hi'和'hello'键,这可能是你错误的原因。
Barmar在他的评论中是正确的,你的方法也应该正常工作,虽然对象符号更方便,因为它会为你逃避特殊字符,我认为它更具可读性。
答案 1 :(得分:1)
*不要在开发时使用@
。
我使用JSON类型为您提供了一个工作示例:
HTML(Index.php):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>new</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta name="generator" content="editplus" />
<meta name="author" content="" />
<meta name="keywords" content="" />
<meta name="description" content="" />
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('#click').bind('click', test);
});
function test(){
var hi = 'hi';
var hello = 'hello';
var dataString = 'a='+ hi + '&b='+ hello;
$.ajax({
url: "update.php",
type: "POST",
data: dataString,
dataType:'json',
cache: false,
success: function(data)
{
$('div').html(data.succ+' ,a = '+data.a + ', B = ' + data.b+ ' , '+data.time);
}
});
return false;
}
</script>
</head>
<body>
<input type="submit" id="click" value="Click">
<div></div>
</body >
</html>
<强> update.php:强>
<?php
$a = $_POST['a'];
$b = $_POST['b'];
$return = array('succ' => 'true','a' => $a,'b' => $b,'time' => time());
header('content-type: application/json; charset=utf-8');
echo json_encode($return);
?>
正如你所看到的,我带着一个&amp; b到update.php文件并将结果返回到index.php。
工作完美。
修改强>
我还测试了您提供的当前代码,它也在运行:
您可以在网络标签页上看到响应A和B.
我刚刚将update.php更改为:
<?php
$a = $_POST['a'];
$b = $_POST['b'];
echo 'a='.$a;
echo ',';
echo 'b='.$b;
?>