2013-09-23 40 views
0

我試圖從jQuery做出請求,看是否有足夠的資源在存儲中建造房屋。我真的不明白ajax函數$ .get,$ .post和$ .ajax之間的區別,以及何時使用哪個。 我認爲$ .ajax是一個更高級的函數,它也包含get和post,但是什麼時候使用get,以及什麼時候使用post?而且,我在這裏以正確的方式使用.get?最佳做法ajax,簡單的變量請求

這裏是我的jQuery代碼:

var x = 10 // x-position 
    var y = 10 // y-position 
    $.get('request.php?house=cottage&x='+x+'&y='+y, function(data){ 
     if(data == 1){ // If there is enough resources etc... return 1. 
      itemId++; // Set unique id for this building. 
      $('body').append("<div class='house' id='" + itemId + "'></div>"); 
      $('#'+itemId).css({ 
       marginLeft: x - ($('.house').width())/2, 
       marginTop: y - ($('.house').width())/2 
      }); 
      $('#rightMouseMenu').hide(); 
     } 
    }); 

而且request.php:

<?php 
$house = $_GET['house']; 
$x = $_GET['x']; 
$x = $_GET['y']; 

// Some request to database to see if there is enough resources to build a house in enoughResources() 

if(enoughResources() == 1){ 
    echo 1; 
}else{ 
    echo 0; 
} 
?> 
+0

http://stackoverflow.com/questions/1344303/jquery-ajax-vs-get-post –

回答

1

你要了解什麼是HTTP methods。這裏有一些很好的參考:

http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html http://www.w3schools.com/tags/ref_httpmethods.asp

基本上,你必須同時使用POSTgive data to the server使用GETget data from the server。但是,您應該使用哪種方法沒有真正的限制。這取決於使用場景,值得注意的是它們都有其自身的侷限性。

POST的落後是當你的用戶想與他人共享過濾結果時,他們不能複製&粘貼鏈接,這是令人失望的。 GET的落後是服務器可能在URL過長時丟失信息(more info)。

還有一件事,有些人會誤解POSTGET更安全,因爲用戶看不到發送的數據。但是,除非您使用SSL,否則它們對於故意的人來說都是不安全的。

就你而言,你的目標是「在數據庫中創建一個房子」。儘管在構建它之前必須檢查資源,這看起來像「從服務器獲取信息」,但您的最終目標是存儲。因此,在我看來,使用POST更合乎邏輯。

+0

所以,如果我想從一個答案服務器基於我的問題,在這種情況下,三個參數(房子,x和y)是一個「獲取數據」的東西或「給數據」的東西?我認爲這是... – theva

+0

你必須使用'GET'。您使用某些過濾器(房屋,x和y)從服務器獲取數據。過濾器不是要存儲在服務器上的數據。當您發送將存儲在服務器上的數據時使用'POST'。 – Brian

+0

好的!我讀了w3schools-link,但不明白POST的壞處是什麼?爲什麼不總是使用它?僅僅是我想要保存鏈接到請求的可能性嗎?而且,我還沒有提到它,但PHP腳本也將剛剛建立的數據庫存儲在數據庫中,GET仍然正確嗎? – theva

0

$ .get和$ .post函數只是使用$ .ajax方法進行GET和POST請求的簡寫方法,您可以使用$ .get使GET請求和$ .post使用標準選項:網址,數據,成功回調和數據類型。

。獲得$(URL [,數據] [,成功(數據,textStatus,jqXHR)] [,的dataType])

$ .POST(URL [,數據] [,成功(數據, textStatus,jqXHR)] [,dataType])

並使用$ .ajax方法使請求具有更多選項。

基本上你可以重寫你的例子:

var x = 10 // x-position 
var y = 10 // y-position 
$.get('request.php', {'house': 'cottage', 'x': x, 'y': y}, function(data){ 
    if(data == 1){ // If there is enough resources etc... return 1. 
     itemId++; // Set unique id for this building. 
     $('body').append("<div class='house' id='" + itemId + "'></div>"); 
     $('#'+itemId).css({ 
      marginLeft: x - ($('.house').width())/2, 
      marginTop: y - ($('.house').width())/2 
     }); 
     $('#rightMouseMenu').hide(); 
    } 
}); 
+0

好的,謝謝!如何以最佳方式回答PHP?似乎有一個更好的解決方案,而不是隻是迴應1或0.是嗎? – theva

+0

服務器返回的內容沒有限制,所以它可以是JSON,XML甚至平面文本。但最簡單的響應類型是JSON,因爲它可以在客戶端輕鬆處理。此外,jQuery可以自動識別響應類型並將適當的JSON對象返回給您的成功回調,或者您可以在dataType選項中手動指定它。看看這個[http://php.net/manual/en/book.json.php](http://php.net/manual/en/book.json.php)獲取更多信息。 –