是否可以通过Ajax从php返回javascript函数?通常情况下,我只返回一个值,然后决定用普通的javascript做什么,但现在因为我正在处理Apache Cordova移动应用程序,我想以不同的方式做事。
error:function(){
$("#result").html('There was an error please contact administrator');
}
.PHP
account = localStorage.getItem("account");
account = JSON.parse(account);
$.ajax({
type: "POST",
url: example.php,
data: { account = account.rule }
});
然后运行它。当用户重定向到网站时,我会再次检查。
答案 0 :(得分:3)
虽然您要求做的是可能的,但还有更好的方法可以解决这个问题。请考虑返回一个包含使用客户端脚本构建链接所需数据的数组。构建Ajax以调用相应的添加链接。您可以进一步扩展它以包含更多可配置对象,或者构建要追加并返回的html,而不是尝试运行javascript eval
。
function updateNav(links) {
links.forEach(function(link){
$li = $('<li></li>');
$a = $('<a></a>');
$a.prop('href',link['uri']);
$a.html(link['text']);
$li.append($a);
$('#nav').append($li);
});
}
var dummyData = {
navLinks: [
{
uri: 'http://stackoverflow.com',
text: 'StackOverflow'
},
{
uri: 'http://google.com',
text: 'Google'
}
]
};
var dummyHtml = {
navHtml: '<ol><li><a href="http://meta.stackoverflow.com">Meta StackOverflow</a></li></ol>'
};
function ajaxSimData() {
var someAjaxObject = {};
someAjaxObject.success = function(data) {
updateNav(data['navLinks']);
};
someAjaxObject.success(dummyData);
}
function ajaxSimHtml() {
var someAjaxObject = {};
someAjaxObject.success = function(data) {
$('#nav').after(data['navHtml']);
};
someAjaxObject.success(dummyHtml);
}
$('.ajaxTriggerData').click(ajaxSimData);
$('.ajaxTriggerHtml').click(ajaxSimHtml);
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.js"></script>
<div id="message">
Simple Examples:<br>
<button class="ajaxTriggerData">Populate Nav from Data</button><br>
<button class="ajaxTriggerHtml">Load HTML string after Nav</button><br>
</div>
<div id="body">
<h3>Some navigation elements: </h3>
<ul id="nav">
<li><a href="#">Nav1</a></li>
<li><a href="#">Nav2</a></li>
<li><a href="#">Nav3</a></li>
</ul>
</div>
$isAdmin = $conn->prepare("SELECT role FROM users WHERE username = :username");
$isAdmin->bindParam(":username", $username);
$isAdmin->execute();
$navLinks = [];
if($isAdmin->fetch(PDO::FETCH_ASSOC)) {
$navLinks = [
['uri' => 'admin.html', 'text' => 'Admin panel'],
];
}
return json_encode([
'navLinks' => $navLinks
]);
答案 1 :(得分:2)
是的,你可以 - 响应文本只是字符串 - 但它可能不被认为是一种好的做法,特别是如果你制作一个模式。查看您的代码,如果用户是管理员,看起来您想要做的是附加到应用程序管理员面板的导航链接。最好采用以下代码客户端并将其包装在客户端函数中:
function appendAdminLink() {
$("header nav").append(
$("<a />").attr("href", "admin.html").text("Admin panel")
)
}
...而不是返回该函数,在PHP中只返回如下内容:
{ isAdmin: true }
然后,客户端可以验证用户是否为管理员,如果是,您可以致电appendAdminLink
。