2012-09-14 103 views
4

是否有可能像使用Ajax一樣使用SSE將POST數據發送到PHP?通過服務器發送事件向PHP發佈POST?

我一直在使用AJAX很長一段時間,但在長輪詢技術中效果不好。我也一直在思考WebSockets,但似乎有點多餘。

+1

SSE是專爲單向推動,而不是雙向通信 - 此Web套接字可能是更合適的 – tomfumb

+0

怎麼樣的node.js, http://nodejs.org – FirmView

+0

@tomfumb我只POST 2字節的數據 – user1431627

回答

4

不,SSE不能發送任何數據到服務器。

您仍然可以使用SSE實時讀取數據並使用AJAX上傳任何數據(您可能需要共享數據庫在AJAX接收過程和SSE發送過程之間傳遞信息)。

0

您可以通過GET發送數據。

例如

name=john&name=lea 

這是一個簡單的腳本,它向服務器發送迭代次數,服務器使用SSE返回進度。

該項目由兩個文件(index.php和ssedemo.php)組成。

index.php包含一個文本框和一個按鈕。假設文本框中包含循環的迭代次數在ssedemo.php

<h2>Server Sent Event Test</h2> 
    <form> 
     <label>Process Duration</label> 
     <input type="text" id="progVal"> 
     <input type="button" value="Get Messages" onclick="updateProgress()"/> 
    </form> 
    <div id="container"> 
    </div> 

的UpdateProgress

function updateProgress() { 
     var input = $('#progVal').val(); 
     var evtSource = new EventSource("ssedemo.php?duration=" + encodeURIComponent(input)); 
     evtSource.addEventListener("progress", function (e) { 
      var obj = JSON.parse(e.data); 
      $('#container').html(obj.progress); 
      if( parseInt(obj.progress) == 100){ 
       evtSource.close(); 
      } 
     }, false); 
    } 

這個功能得到使用jQuery文本框的內容,然後創建一個eventSource。 EventSource()構造函數帶有一個或兩個參數。第一個指定要連接的URL。第二個以EventSourceInit字典的形式指定設置(如果有的話)。

您可以通過將其添加到URL來傳遞您想要的內容,就像使用GET一樣。

"ssedemo.php?duration=" + encodeURIComponent(input)

在服務器端,你必須設置頭型和禁用緩存根據W3C recommendation

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

然後你使用$ _GET像往常一樣的數據。

$TotalNo = $_GET['duration']; 
for ($i = 1; $i <= $TotalNo; $i++) { 
    updateProgress($i, $TotalNo); 
    sleep(1); 
} 


function updateProgress($currentVal, $totalNo) { 
    $completionPrecentage = $currentVal/$totalNo * 100; 
    echo "event: progress\n"; 
    echo 'data: {"progress": "' . $completionPrecentage . '"}'; 
    echo "\n\n"; 
    ob_flush(); 
    flush(); 
} 

,如果你想送數組可以參考this

+0

歡迎來到Stack Overflow!雖然這可能會在理論上回答這個問題,[這將是更可取的](// meta.stackoverflow.com/q/8259)在這裏包括答案的基本部分,並提供參考鏈接。 –

相關問題