2013-09-23 44 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)获取更多信息。 –