1

私は、jcontainerのクラスを持つ複数のdivが存在するアプリケーションを作成しているかなり初心者のプログラマーです。各jcontainerには、データベース内のapptidというフィールドに対応するIDが関連付けられています。Jqueryでは、5秒ごとにAJAXリクエストをphpページに送信して、データベース内の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);

?>

問題は、alert(msg)から応答が得られないことです。どうしてこれなの?Chrome Developerを確認しましたが、エラーは発生しませんでした。

最終的な目標は、現在の場所の番号を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

$ .getJSON()を使用する必要があります

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

次に、PHPで、次のようにjsoncallbackを使用する必要があります。

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

ここで注意すべき2つのこと。

1、jsonからのリターンをではなくにdata入れconsoleますalert()

2、 " "ではなくdataid従来の配列値()メソッドを使用するため、変数をチェックする必要がある場合がありますid:3,key:valueid=3&key=vaule

于 2012-11-21T01:56:47.423 に答える
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();

そして、Pheryライブラリに合うようにHTMLを変更します

<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 に答える