我正在尝试从jQuery发出请求,看看存储中是否有足够的资源来构建一个房子。我真的不明白ajax-functions $ .get,$ .post和$ .ajax之间的区别,以及何时使用哪个。 我认为$ .ajax是一个更高级的功能,它还包括get和post,但是我什么时候使用get,什么时候使用post?而且,我在这里以正确的方式使用.get吗?
这是我的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 :(得分:1)
您必须了解HTTP methods
是什么。以下是一些很好的参考资料:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html http://www.w3schools.com/tags/ref_httpmethods.asp
基本上,在使用GET
到get data from the server
时,您必须使用POST
到give data to the server
。但是,您应该使用哪种方法没有实际限制。这取决于使用场景,值得注意的是它们都有自己的局限性。
POST
的向后是当您的用户想要与其他人共享过滤结果时,他们不能只复制和粘贴链接,这是令人失望的。如果网址太长(more info),则GET
的后方是服务器可能会丢失信息。
还有一件事,有些人会误解POST
比GET
更安全,因为用户无法看到发送的数据。但是,除非您使用SSL,否则它们对于故意的人来说都是不安全的。
在您的情况下,您的目标是“在数据库中创建一个房子”。虽然您必须在构建之前检查资源,这似乎是“从服务器获取信息”,但您的最终目标是存储。因此,在我看来,使用POST
更合乎逻辑。
答案 1 :(得分:0)
$。get和$ .post函数只是使用$ .ajax方法获取GET和POST请求的简写方法,您可以使用$ .get来生成GET请求,使用$ .post来使用标准选项发出POST请求,例如:网址,数据,成功回调和数据类型。
$。get(url [,data] [,success(data,textStatus,jqXHR)] [,dataType])
$ .post(url [,data] [,success(data,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();
}
});