鍍金池/ 問答/PHP  HTML/ $.post()請求發(fā)送數(shù)據(jù)的原理?

$.post()請求發(fā)送數(shù)據(jù)的原理?

1、我們知道,一般的表單請求是這醬紫的

//前端
<form method="post" action="php.php"> 
    <input type="text" name="username" />
</form>

//后端
//php.php
$username = $_POST['username']

2、xhr對象的原生ajax請求是這樣的:

var xmlhttp = new XMLHttpRequst();
xmlhttp.open("POST","/statics/demosource/demo_post2.php",true);

//必須設(shè)置了這個請求頭,模擬表單,后端依然通過表單的name字段獲取值
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");

xmlhttp.send("fname=Henry&lname=Ford");

原生的ajax post request,依然是模擬表單,后端還是通過表單的name字段獲取值

3、$.post()實現(xiàn)的HTTP請求:

//前端
$.post('web.php', { "username": "lofayo" }, function(data) {
    console.log(data)
})

//后端
//web.php
$username = $_POST['username']

其實,這個我就不太理解了,最原始的HTTP請求通過表單實現(xiàn),前面的三種方法也都是模擬表單請求實現(xiàn),唯獨這種放卻不是模擬表單,卻依然能夠?qū)崿F(xiàn)HTTP請求,而且無論前端何種方式請求,后端都是統(tǒng)一方式獲取發(fā)送的數(shù)據(jù)

請問這個$.post()方法的HTTP請求具體原理是為何?難道真是不用模擬表單的另一種請求方式?

回答
編輯回答
孤星

首先2不是模擬表單,表單應(yīng)該是form-data,而2application/x-www-form-urlencoded。
其次你把2中的代碼封裝一下,不就是3了嗎?
而事實上1,2,3都只做了一件事情,就是滿足http協(xié)議,然后發(fā)送它。

2018年7月9日 11:17