2013-05-01 32 views
0

这是我的预览问题的一个更清晰的代码,它的想法是使用ajax发送和检索值,但该值没有被发送,也没有Ajax似乎工作。我更新了这个代码,因为这样可以很容易地在任何机器上测试它。第一次使用ajax。下面是代码:使用ajax发送和检索值问题

的Javascript

<script> 
jQuery(document).ready(function() { 
jQuery('#centro').click(function() { 
$.ajax({ 
     url: 'request.php', 
     type:'POST', 
     data: $("#form").serialize(), 
     dataType: 'json', 
     success: function(output_string){ 
     alert(output_string); 
       $('#cuentas').html(output_string); 
      } // End of success function of ajax form 
     }); // End of ajax call  

    }); 
} 
}); 
</script> 

HTML:

<?php 
    $result = 'works'; 
    ?> 

    <form id="form"> 
    <div id="centro"> 
    <a href="#">Click here</a> 
    <br> 
    <input type="hidden" name="centro" value="<?php echo $result; ?>"> 
    </form> 

    <div id="cuentas"> 
    </div> 

PHP文件,request.php

<?php 
$centro = $_POST['centro']; 
$output_string = ''.$centro; 
echo json_encode($output_string); 
?> 
+1

什么'的var_dump($ _ POST);' – 2013-05-01 15:55:21

+0

其中@HankyPanky? – 2013-05-01 15:57:07

+0

在你的'load_cuentas.php'之上,放上'var_dump($ _ POST);'并且看看它首先得到了什么值?并请与我们分享输出 – 2013-05-01 15:59:19

回答

0

看起来你从来没有告诉AJAX的POST名字'centro',试图改变它:

data: $("#form_"+i).serialize(), 

data: { 'centro' : $("#form_"+i).serialize()}, 
+0

这是他的第一个片段中隐藏的输入形式。 – 2013-05-01 15:58:43

+0

谢谢@KirKill我更新了,但它仍然在警报中抛出空值 – 2013-05-01 15:59:30

+0

尝试查看$ _POST ['centro']是否真的是问题,回显它并退出后,您应该在警报中看到它的值。 – 2013-05-01 16:02:49

0

试试这个:

HTML

<?php 
    $i=0; 
    $f=0; 
    $consulta = $db->consulta("SELECT * FROM centro"); 
    if($db->num_rows($consulta)>0){ 
     while ($resultados1 = $db->fetch_array($consulta)){ ?> 
     <form id="form_<?php echo $f++; ?>"> //begin form with its id 
      <div class="centro" id="centro_<?php echo $i++; ?>"> 
       <a href="#"> <?php echo $resultados1['nombre_centro']; ?></a> 
       <br> 
       <input type="hidden" name="centro" value="<?php echo $resultados1['id_centro']; ?>"> 
       <!--this is the data that is going to be sent. I set up a hidden input to do it.--> 
      </div> 
     </form> 
     <div id="cuentas" class="cuentas"> 
      <!--where data is going to be displayed--> 
     </div> 
     <br> 
     <?php 
     } 
    } 
?> 

的Javascript:

<script> 
jQuery(document).ready(function() { 
    jQuery('.centro').on('click',function() { 
     var formElem=jQuery(this).closest('form'); 
     jQuery.ajax({ 
      url: 'load_cuentas.php', 
      cache: true , 
      type:'POST', 
      dataType: 'json', 
      data: $(formElem).serialize(), 
      success: function(output_string){ 
       jQuery(formElem).next('div.cuentas').html(output_string); 
       alert(output_string); 
      } // End of success function of ajax form 
     }); // End of ajax call 
    }); 
}); 

</script> 

服务器页:

<?php 
    include ('mysql.php'); 
    $db = new mysql(); 
    $centro = $_POST['centro']; //this is not getting any data. the whole ajax thing 
    $consulta = $db->consulta("SELECT * FROM cuenta WHERE id_center = '$centro'"); 
    $output_string=array(); 
    if($db->num_rows($consulta)>0){ 
     while ($resultados1 = $db->fetch_array($consulta)){ 
      $output_string []= 'test text'; 
     } 
    }    
    mysql_close(); 
    echo json_encode($output_string); 
?> 
+0

非常感谢@Rohan,这次它抛出'[]'问题出在$ _POST ['centro'];不知道为什么它没有被发送 – 2013-05-01 16:26:41

+0

检查你在$ _POST ['centro']'中得到了什么,还检查你的查询是否返回非空。您可以添加两行: '$ output_string ['sql'] =“SELECT * FROM cuenta WHERE id_center ='$ centro'”;' 'echo json_encode(...)' – 2013-05-02 04:30:38

0

我碰到我的阿贾克斯同样的问题要求,我通过POST方法调用。我的数据实际上在消息正文中传递。我必须通过以下方法访问它:

php://input 

这是一个只读包装流,允许您从消息正文中读取原始数据。

有关此包装的更多信息,请访问this link

托盘添加以下到PHP文件:

$centro = file_get_contents("php://input"); 
// Depending on how you pass the data you may also need to json_decode($centro) 
echo json_encode($centro); 
// See if you get back what you pass in 

此阅读邮件正文(我发布的数据),我能在那里访问的价值。

希望这会有所帮助。

+0

谢谢@ War10ck for your answer: )它给出了一个结果,这次的结果是空白的 – 2013-05-01 16:15:48

+0

@HerlandCid没问题的朋友。你期待的结果是什么? – War10ck 2013-05-01 16:19:03

+0

那么,在PHP文件中,如果它获取变量,并运行查询,结果应该是'测试文本'@ War10ck – 2013-05-01 16:29:26

0

尝试在你的Ajax后使用此代码:

jQuery('#centro_'+i).click(function() { 
$.ajax({ 

    data: $("#centro_"+i).closest("form").serialize(), 
    dataType:"html", 
    success:function (data, textStatus) { 
       $('#cuentas').html(data); 
       alert(data);}, 
    type:"post", 
    url:"load_cuentas.php" 

     }); 
}); 
+0

感谢@Ahmed,现在发布的ajax作品。但警报仍显示为空白。 – 2013-05-01 16:19:39

+0

尝试以html的形式回显:echo $ output_string; – 2013-05-01 16:28:32

+0

谢谢@AhmedAtta我做了$ centro ='$ _POST ['centro']; echo $ centro; '仍然显示空白。 – 2013-05-01 16:35:55