我用了这个功能
jQuery.ajax({
type: 'POST',
url: urlSubmit,
timeout: 5000,
dataType: 'text',
data: {
date : dataDate,
url : dataUrl,
domaine : dataDomaine,
email : dataEmail,
destinataire : dataDestinataire,
msg : dataMsg
},
"success": function (jqXHR, textStatus, errorThrown) {
console.log("AJAX success :) - statut " + textStatus);
$timeout(successMailZR_alerte, 3000);
},
"error": function (jqXHR, textStatus, errorThrown) {
console.log("AJAX fail :/ - statut " + textStatus);
$timeout(errorMailZR_alerte, 3000);
}
});
代码的作用是:将POST代码发送到发送电子邮件的php脚本。
但是,由于我在一个完整的angularjs应用中重写了代码,所以我这样做是这样的:
$http({
method: 'POST',
url: urlSubmit,
timeout: 5000,
cache: false,
data: {
date : dataDate,
url : dataUrl,
domaine : dataDomaine,
email : dataEmail,
destinataire : dataDestinataire,
msg : dataMsg
},
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
responseType: 'text',
}).
success(function(data, status, headers, config) {
console.log("AJAX success :) - statut " + status);
$timeout(successMailZR_alerte, 3000);
}).
error(function(data, status, headers, config) {
console.log("AJAX fail :/ - statut " + status);
$timeout(errorMailZR_alerte, 3000);
});
问题是:使用$ http,我获得了200的成功,但没有张贴任何内容,并且我的电子邮件中没有任何回报。有什么问题 ?
最佳答案
要理解这一点,需要了解由angular
和jquery
设置的请求标头,这些标头之间存在差异,例如jQuery请求发布时标头可能看起来像这样:
POST /some-path HTTP/1.1
Content-Type: application/x-www-form-urlencoded // default header set by jQuery
foo=bar&name=John
您可以在浏览器中发出的请求中以表单数据的形式查看此内容,如果使用chrome,则可以在chrome inspector的“网络”标签中看到此内容;如果单击请求,则可以看到由设置的
form data
和内容标头jQuery的。另一方面,使用angular js
$http
服务时,发出请求后,您可以找到以下内容:POST /some-path HTTP/1.1
Content-Type: application/json // default header set by angular
{ "foo" : "bar", "name" : "John" }
真正的区别是您有一个
request payload
而不是jQuery使用的form data
。因此您需要在服务器端做一些额外的事情,如下所示。用这个:
$data = json_decode(file_get_contents("php://input"));
echo $data->date;
// and all other params you have sent
这是由于其默认标题
接受:application / json,text / plain,* / *
内容类型:application / json
和jQuery不太可能有其他东西:
内容类型:application / x-www-form-urlencoded;字符集= UTF-8
关于javascript - jQuery.ajax至$ http,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25563047/