Javascript 使用$http时,如何将HTML返回为HTML而不是文本
这件事我已经坚持了好几天了 基本上我有一个带Angular的$http.post,发布一个电子邮件地址和一条从post.php发送的邮件。然后,Post.php会根据mail()的结果回显文本,但当我返回Success时,它实际上会在DOM上显示HTML,而不是处理它 谢谢你的帮助Javascript 使用$http时,如何将HTML返回为HTML而不是文本,javascript,php,html,angularjs,Javascript,Php,Html,Angularjs,这件事我已经坚持了好几天了 基本上我有一个带Angular的$http.post,发布一个电子邮件地址和一条从post.php发送的邮件。然后,Post.php会根据mail()的结果回显文本,但当我返回Success时,它实际上会在DOM上显示HTML,而不是处理它 谢谢你的帮助 app.controller('contactsController', function($scope, $rootScope, $http) { $rootScope.currentPage =
app.controller('contactsController', function($scope, $rootScope, $http) {
$rootScope.currentPage = "contact";
$scope.postData = {};
$scope.data = "Send";
$scope.runScript = function() {
$http({
url: "post.php",
method: "POST",
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
data: $.param({"postData":$scope.postData})
}).success(function(data) {
$scope.data = data;
console.log(data);
$scope.contactForm.$valid = false;
}).error(function(data, status, headers, config) {
$scope.status = status;
});
};
});
<?php
// get the raw POST data
$inputData = $_POST['postData'];
if(isset($inputData["email"])&&isset($inputData["message"])) {
$email = $inputData["email"];
$message = $inputData["message"];
$to = "XXXXXXXXXXXXX@XXXXXXXXXX.COM"; // required
$from = $email; // required
$body = $message;
$subject = "Online Query Submission";
// create email headers
if(mail($to,$subject,$body,"From:$from/r/nReply-to:$from"))
echo "<p>Success - Thanks!</p>";
else
echo "<p>Error - Sorry!</p>";
}
?>
app.controller('contactsController',函数($scope、$rootScope、$http){
$rootScope.currentPage=“联系人”;
$scope.postData={};
$scope.data=“发送”;
$scope.runScript=函数(){
$http({
url:“post.php”,
方法:“张贴”,
标题:{'Content-Type':'application/x-www-form-urlencoded'},
数据:$.param({“postData”:$scope.postData})
}).成功(功能(数据){
$scope.data=数据;
控制台日志(数据);
$scope.contactForm.$valid=false;
}).error(函数(数据、状态、标题、配置){
$scope.status=状态;
});
};
});
我认为您应该在您的视图中使用ng bind html
,如下所示:
<div ng-bind-html="data"></div>
$http(url).success(function(data){
$scope.data=data;
});
从
ng bind html
计算表达式并以安全的方式将生成的html插入元素中
你可以在这里找到你想要的
然而,我认为让PHP只返回一个确认文本并在前端使用Angular对其进行格式化将是一个很好的做法。尽管每个人都提供了极大的帮助,但问题的一部分是
ng bind html=“data”
剩下的问题是,我没有意识到ngSanitize
是一项要求,将它作为依赖项加入,它就完美地工作了:)
我相信有一种更快的方法可以绕过ngSanitize,比如
$sce.trustAsHtml
,但我认为这不是一种好的做法。你的意思是你在html中使用过它,但没有提到它?当我在文档中调查你的有用答案时,我意识到它需要消毒——我以前试过,虽然我可能没有正确使用它。谢谢你的回答。谢谢你的$sce.trustAsHtml技巧,很高兴知道:)可能没有ng bind html那么安全,但是有一条消息,没有太大的风险任何其他人都在努力解决这个问题,别忘了检查关于ng bind html的文档。它需要ngSanitize作为依赖项。谢谢就我个人而言,我会直接从服务器返回文本,而不使用HTML,这样,如果我以后想更改演示文稿,我就不必担心服务器或数据,只需要标记本身。