2015-04-12 22 views
1

嗨幾天前我問了一個類似的問題,沒有任何迴應。我試圖自己解決這個問題,但沒有成功。 我已經成功地使用了服務器發送的請求,爲數據庫輪詢新條目併成功獲取以json格式返回的數據(在webconsole中確認)。我似乎無法做的是在eSource.onmessage函數中使用其他函數中的數據。如何在服務器發送的事件中使用數據響應

這是jQuery的

<script type="text/javascript"> 

$(document).ready(function() {//READY FUNC 

    //check for browser support 
    if(typeof(EventSource)!=="undefined") { 
     //create an object, passing it the name and location of the server side script 
     var eSource = new EventSource("http://newberylodge.co.uk/webapp/includes/messageRetrieve.php"); 
     //detect message receipt 
     eSource.onmessage = function(event) { 
      //write the received data to the page 
      $.each(data, function(key, val) { 
      //iterate each data 
       var id = val.id; 
       var messageId = val.messageId; 
       var messageSubject = val.messageSubject; 
       var messageContent = val.messageDetail; 

       $('#serverData').append('<div id="' + id + '" class="messageAlert">' + messageSubject + '</div>'); 
       $('#serverData').append('<div id="' + messageId + '" class="messageContent">' + messageContent + '</div>'); 
       $('#' +messageId).append('<input id="' + messageId + '" type="button" class="deleteButton" value="Delete Message" />'); 

      }); 
      //EACH DATA 
     } 

     $(document).on('click', '#' +messageId, function(){ 
     //on click 

      $.post("http://newberylodge.co.uk/webapp/includes/deleteMessage.php",{value1 : messageId}, function() { 
       location.reload(true); 
       alert('Message Deleted'); 
      }); 
      //POST AJAX 
     }); 
     //END ON CLICK 
    }; 
    //TYPE OF EVENT SOURCE   

}); 
//DOCUMENT READY FUNC 
</script> 

這是PHP處理網頁messageReturn.php

<?php 

include_once 'db_connect.php'; 
$return_arr = array(); 
$result = mysqli_query($mysqli, "SELECT * FROM message"); 

while($row = mysqli_fetch_array($result)) {   
    $row_array['id'] = $row['id']; 
    $row_array['messageId'] = $row['messageId']; 
    $row_array['messageSubject'] = $row['messageSubject']; 
    $row_array['messageDetail'] = $row['messageDetail']; 

    array_push($return_arr,$row_array); 

} 

header('Content-Type: text/event-stream'); 
header('Cache-Control: no-cache'); 

echo json_encode($return_arr); 
flush(); 

?> 

這,我相信我會錯了,但不知道如何

 eSource.onmessage = function(event) { 
      //write the received data to the page 
      $.each(data, function(key, val) { 
      //iterate each data 
       var id = val.id; 
       var messageId = val.messageId; 
       var messageSubject = val.messageSubject; 
       var messageContent = val.messageDetail; 

       $('#serverData').append('<div id="' + id + '" class="messageAlert">' + messageSubject + '</div>'); 
       $('#serverData').append('<div id="' + messageId + '" class="messageContent">' + messageContent + '</div>'); 
       $('#' +messageId).append('<input id="' + messageId + '" type="button" class="deleteButton" value="Delete Message" />'); 

      }); 
      //EACH DATA 
     } 

我想要做的是從響應中獲取json數據,以便我可以在腳本中的其他函數中使用它。 任何人都可以協助嗎?

+0

嘗試循環之前增加一個'typeof運算data' ,我敢打賭這是一個字符串,而不是一個對象,並且你需要執行'data = JSON.parse(data)' – adeneo

+0

所以你已經設法在console.log中返回jQuery代碼中的數據? – Zak

+0

@zac我有頁面生活和瀏覽器中,我可以看到響應爲json。在這裏住的頁面:http://newberylodge.co.uk/webapp/message.html – Tiny

回答

1

您收到的消息是一個JSON字符串,它在解析成Javascript對象之前無法迭代。

其次,你似乎沒有什麼數據,你使用data,但它從來沒有在任何地方定義,你想要的是event.data

if (typeof (EventSource) !== "undefined") { 

    var eSource = new EventSource("http://newberylodge.co.uk/webapp/includes/messageRetrieve.php"); 

    eSource.onmessage = function (event) { 

     var data = JSON.parse(event.data); 

     $.each(data, function (key, val) { 
      var id = val.id; 
      var messageId = val.messageId; 
      var messageSubject = val.messageSubject; 
      var messageContent = val.messageDetail; 

      $('#serverData').append('<div id="' + id + '" class="messageAlert">' + messageSubject + '</div>'); 
      $('#serverData').append('<div id="' + messageId + '" class="messageContent">' + messageContent + '</div>'); 
      $('#' + messageId).append('<input id="' + messageId + '" type="button" class="deleteButton" value="Delete Message" />'); 

     }); 
    } 

    .... etc 
+0

我已經做了這一改變,但沒有任何改變的活頁。我有數據顯示沒有做服務器發送事件的東西,所以我知道其他功能的工作。我只需要輪詢來確定是否有新消息,然後提醒用戶有新消息。我如何得到一個積極的迴應,然後提醒用戶,並提示他們重新加載頁面,然後我可以與我知道工作的腳本,或者是這裏錯誤的方法 – Tiny

+0

這個答案看起來不錯。如果它仍然不起作用,請嘗試在'JSON.parse()'行後面添加'console.log(data)',然後檢查Firebug以查看該階段的具體內容。 –

相關問題