1

我是一个非常新手的程序员,他正在制作一个应用程序,其中有多个带有jcontainer类的 div 。每个jcontainer都有一个与之关联的 id,它对应于数据库中名为apptid的字段。在 Jquery 中,我每 5 秒向 php 页面发送一个 AJAX 请求,以检索数据库中名为currentlocation的字段(对应于apptid),每个jcontainer 都会发生这种情况。

这是我的代码:

HTML:

<div class='jcontainer' data-param='jcontainer_IDNUMBER'>

  <button class='checkIn' data-param='button_IDNUMBER'>Check In</button>
  <form method='post' class='myForm' action=''>
       <select name='locationSelect' class='locationSelect' data-param='location_IDNUMBER'>
            <option value='1'>Exam Room</option>
            <option value='2'>Exam Room 2</option>
            <option value='3'>X-Ray Room</option>
            <option value='1000'>Check Out</option>
       </select>
  </form>
  <div class='finished' style='color:#ff0000;'>Checked Out</div>

</div>

jQuery:

<script type="text/javascript">
$(document).ready(function() {

  setInterval(function(){

    $('.jcontainer').each(function() {
        var $e = $(this);
        var dataid = $e.data("param").split('_')[1] ;

        $.ajax({
            url: 'heartbeat.php',
            method: 'post',
            contentType: "application/json",
            dataType: "json",
            data: dataid,
            success: function(data){
                var msg = $.parseJSON(response);
                alert(msg);
            }
        });

    });
  },5000);

  //other code that I didn't post, because it's not really relevant, but can post if needed be

和php页面:

<?php

$hostname = 'localhost';

$username = '******';

$password = '*************';

$apptid = $_POST['dataid'];

$db = new PDO("mysql:host=$hostname;dbname=sv", $username, $password);
$statement = $db->prepare("SELECT currentlocation FROM schedule WHERE apptid = :apptid");
$statement->execute(array(':apptid' => $apptid));
$row = $statement->fetch();

$currentlocation = array('CurrentLocation' => $row['currentlocation']);
echo json_encode($currentlocation);

?>

问题是我无法从警报(msg)中得到任何响应。为什么是这样?我检查了 Chrome 开发人员,没有出现任何错误。

最终目标是将当前位置编号记录在 jquery 变量中。前->var currentLocation = Number

感谢您的所有帮助,如果您需要更多详细信息来解决问题,我可以很高兴地发布!

4

4 回答 4

3

这段代码:

success: function(data){
            var msg = $.parseJSON(response);
            alert(msg);
        }

应该读

success: function(data){
            var msg = $.parseJSON(data);
            alert(msg);
        }

导致response变量未声明且未定义,因此您应该data在 parseJSON 方法中使用该变量,因为这是接收到的实际数据。希望这可以为您解决。

于 2012-11-21T01:58:13.080 回答
2

你不需要$.parseJSON,jQuery 会自动解析 JSON,因为你告诉它dataType: "json"。你alert应该说Object。使用浏览器控制台,console.log(data)查看对象的结构。

于 2012-11-21T02:22:00.603 回答
1

您可以使用我的库自动为您执行此操作http://phery-php-ajax.net

function heartbeat($data){
  $r = new PheryResponse;

  $hostname = 'localhost';

  $username = '******';

  $password = '*************';

  $apptid = $data['id'];

  $db = new PDO("mysql:host=$hostname;dbname=sv", $username, $password);
  $statement = $db->prepare("SELECT currentlocation FROM schedule WHERE apptid = :apptid");
  $statement->execute(array(':apptid' => $apptid));
  $row = $statement->fetch();

  // If you want to manipulate the DOM inside the jcontainer use:
  // $r->this()->find('.locationSelect'); 
  // for examplee
  return $r->set_var('currentLocation', $row['currentlocation']); //set the global var
}

Phery::instance()->set(array(
  'heartbeat' => 'heartbeat'
))->process();

你会改变你的 HTML 以适应 Phery 库

<div class='jcontainer' data-remote='heartbeat' data-args="<?php echo Phery::args(array('id' => $number)); /* place your number in here */ ?>" id='jcontainer_IDNUMBER'>
  <button class='checkIn' data-param='button_IDNUMBER'>Check In</button>
  <form method='post' class='myForm' action=''>
     <select name='locationSelect' class='locationSelect' data-param='location_IDNUMBER'>
        <option value='1'>Exam Room</option>
        <option value='2'>Exam Room 2</option>
        <option value='3'>X-Ray Room</option>
        <option value='1000'>Check Out</option>
     </select>
  </form>
  <div class='finished' style='color:#ff0000;'>Checked Out</div>
</div>

你的新 jquery 每个都将是:

$('.jcontainer').each(function(){
  var $this = $(this);
  $this.phery('remote'); // call the remote AJAX with the data
});

如果你想在开发控制台中检查数据,你可以使用,PHP 变量将被转储到控制台中

$r->dump_var($row, $apptid);    
于 2012-11-21T02:39:57.507 回答
1

你应该使用$.getJSON()

$.getJSON("heartbeat.php?jsoncallback=?",
    {dataid},
    function(data){
        console.log(data);  
    }
);

然后在您的 PHP 中,您必须像这样使用 jsoncallback:

echo $_GET['jsoncallback'].'('.json_encode($currentlocation).')';

这里需要注意两点。

1、我把json的返回值data放在了console,而不是alert()

2,您可能需要检查dataid变量,因为它使用传统的数组值(id:3,key:value)方法而不是“ id=3&key=vaule

于 2012-11-21T01:56:47.423 回答