如何修复此未定义的索引错误? Jquery Ajax到PHP

时间:2011-11-08 05:49:52

标签: php jquery post undefined-index

我正在使用Jquery,Ajax和PHP来尝试发送一个要写入mysql数据库的变量。 正在进行Ajax请求,但php没有获取变量。我不知道为什么会这样。

使用firebug和console.log()我可以看到对write_results.php进行了POST

如果我检查响应,则说

注意:未定义的索引: E:\ write_results.php 2

的测试核心

这是我的PHP

<?php 
  $testscore=$_POST['testscore'];  //get testscore from Ajax 
  include 'DB.php';
  $con = mysql_connect($host,$user,$pass);
  $dbs = mysql_select_db($databaseName, $con); 
     if (isset($_POST['testscore'])) {  
       $addClient  = "INSERT INTO variables (`id` ,`name`) VALUES (NULL,'$testscore')";  
       mysql_query($addClient) or die(mysql_error());  
       }

?>  

这是我的ajax脚本

<script type="text/javascript">
$(document).ready(function() {  
testscore ="tryagain"; //testvalue to enter into the mysql database
  $.ajax({  
    type: "POST",  
    url: "write_results.php",  
    data: testscore,      
    success: function(){  
      $('#box2').html("success");
    } 
  })
}); 
</script>

我的问题

  1. 为什么$ testscore没有从ajax脚本接收值?
  2. 我该如何解决这个问题?

3 个答案:

答案 0 :(得分:6)

你没有告诉JS如何发送你的POST参数。将您的JS更改为:

data: { 'testscore':testscore },

这相当于"testscore=" + testcore形式的key=value。它告诉JS和PHP你想要将变量testscore映射到键"testscore",然后你将使用$_POST['testscore']

来获取它。

修改:请参阅http://api.jquery.com/jQuery.ajax/,“将数据发送到服务器”

答案 1 :(得分:2)

在你的PHP代码中,你会得到$ _ test''testscore'的$ testscore值。 $ _POST是一个超级全局数组,testscore是这里的索引。此$ _POST数组的索引来自您发布的表单的字段名称。在您的情况下,您使用ajax将数据传递到php页面。您可以通过GET方法或POST方法传递。由于您在POST文件中指定了类型:POST,因此您可以在php文件中使用$ _POST varibale。但是你没有在ajax代码中指定数组索引来保存值。

testscore ="tryagain"; //It will only assign the value to the javascript variable

您需要提供键值对。你可以这样做:

testscore="testscore=tryagain"; //In your php code, the testscore will be the array index and tryagain will be its value.

您还可以将密钥值对以JSON格式发送到PHP文件,如下所示:

testscore={'testscore':'tryagain'}; 

如果您要发送多个值(例如两个),则可以执行以下操作:

testscore={'testscore':'tryagain','index2':'value2'}

如果在ajax中使用post作为类型,那么在PHP代码中你可以得到如下所示:

$testscore1=$_POST['testscore']; //It will assign tryagain
$testscore2=$_POST['index2'];    //It will assign value 2

答案 2 :(得分:0)

尝试使用data: "testscore=" + testscore, 数据需要格式化为查询字符串。