@ $ _ POST ['什么'];和$ _POST ['东西'];?

时间:2014-05-30 22:36:02

标签: php ajax post wamp

我的文件中有一个简单的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提前。

2 个答案:

答案 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。

工作完美。

修改

我还测试了您提供的当前代码,它也在运行:

enter image description here

您可以在网络标签页上看到响应A和B.

我刚刚将update.php更改为:

 <?php

    $a = $_POST['a'];
    $b = $_POST['b'];

    echo 'a='.$a;
    echo ',';
    echo 'b='.$b;

?>