2013-04-27 33 views
0

在此頁面上的最佳方式......發送和處理可變大小數據

http://lab.2toria.com/reflex/index2.php

當用戶拖拽塊到網格中,我希望能夠發送一些位置形式到一個PHP腳本,將它們保存到一個表中,只需將座標(例如「x1y2」,「x1y3」等)記錄到行中即可。到目前爲止我的表中的字段非常簡單(blockID,blockCoords)

這樣做的最佳方式是什麼?我追求你的意見在兩件事情: -

1)使用jQuery ajax,我怎麼能發送一個包含座標作爲列表的字符串?會是最好創建一個XML字符串,或有另一種方式,我沒有想到的...我怎麼會做這種

和..

2)基於用於發送的方法數據(xml,或其他),我將如何處理接收php腳本中的數據以將數據保存到表中。我知道如何保存記錄等,只是想知道如何處理這種情況。

回答

1
$('element').droppable({ 
    drop:function(event, ui){ 
     $.ajax({ 
      url: '/path/to/my/file.php', 
      type: 'POST', 
      data: {'left' : ui.helper.position().left, 
        'top': ui.helper.position().top}, 
      success: function(data){ 
       //do something with the response from the server 
      } 
     }); 
    } 
}); 

而且在/path/to/my/file.php

if(isset($_POST['left'])): 
    $db = new mysqli('connection info here'); 
    $q = $db->prepare('INSERT INTO some_table (left, top) VALUES (?,?)'); //prepare the statement 
    $q->bind_param('ss', $_POST['left'], $_POST['top']); //safe binding 
    if(FALSE !== $q->execute()): 
     return 'Query Executed!'; 
    endif; //execute the statement 
    return false; 
endif; 

所以在PHP文件我們只是簡單地檢查了$_POST變量left的存在。我們假設top也將可用。我們建立一個mysqli連接,準備一個安全聲明,將參數綁定爲strings,使用$_POST left/topvalues。然後我們檢查執行沒有返回false(返回true/false),如果沒有,我們傳遞一個值並退出條件。如果不是,則默認情況下會返回false。

編輯

從您的意見,您要保存的操作當用戶進行,直到準備實際執行INSERT,這是很容易可行也。

var dc = 0, 
    drops = {}; 

dc將是dropcount,和drops將是一個對象。

$('element').droppable({ 
    drop: function(event, ui){ 
     drops[dc] = {'left' : ui.helper.position().left, 'top' : ui.helper.position().top}; 
     dc++; 
    } 
}); 

在上文中,我們只需通過drops對象遞增,存儲用於在每個液滴左/頂部值的信息。

$('.save').click(function(e){ 
    e.preventDefault(); 
    $.ajax({ 
     url: 'test.php', 
     type: 'POST', 
     data: {'drops': drops}, 
     success: function(data){ 
      console.log(data); 
     } 
    }); 
}); 

在這裏,我們有一個save類的保存按鈕,我們阻止默認動作,然後我們發送滴對象到服務器。

if(isset($_POST['drops'])): 
    //same process as outlined above, use a helper function to insert the rows 
endif; 

現在我們檢查$ _POST變量'drops'是否存在,我們將採用與上面相同的策略。我只是推薦一個幫手function saveDrops($obj),迭代返回的drop,併爲傳入的每個obj執行保存。

+0

這似乎是'保存,你去',這是偉大的(我沒有想到這一點,所以謝謝..),但如果我想發送所有的座標作爲一個文件,然後處理,我會怎麼做? ? – 2013-04-27 21:33:11

+0

@Mat Richardson所以你說你想要在javascript中保存一個對象的座標,那麼當用戶執行一些'最終'動作時,我們實際上會插入? – Ohgodwhy 2013-04-27 21:34:00

+0

是的,當用戶點擊'保存級別'按鈕時,我想讓頁面生成一個放置塊的座標列表(或者其他東西),然後將它們發送到php腳本以保存爲一份工作。 – 2013-04-27 21:36:39

0

1)是的,使用jQuery ajax發佈coords和block id。

2)它們將在$ _POST變量中用於php。

請參見:jQuery Post

+0

什麼是發佈座標的最佳方式?例如,如果我想發送座標x1y1,x2y2等 - 那麼最好的方法是什麼?如果作爲一個xml文件,例如,如何? – 2013-04-27 21:31:40

+0

@ Ohgodwhy的回答非常棒。 – 2013-04-27 22:13:51