javascript - 是否可以通过 ajax 从 php 返回 javascript 函数?

标签 javascript php jquery ajax cordova

是否可以通过 Ajax 从 php 返回 javascript 函数?通常我只会返回一个值,然后决定用纯 javascript 来处理它,但现在因为我正在处理 Apache Cordova 移动应用程序,所以我想以不同的方式做事。

account = localStorage.getItem("account");
account = JSON.parse(account);

$.ajax({
 type: "POST",
 url: example.php,
 data: { account = account.rule }
});

.php

$isAdmin = $conn->prepare("SELECT role FROM users WHERE username = :username");
$isAdmin->bindParam(":username", $username);
$isAdmin->execute();
$result = $isAdmin->fetch(PDO::FETCH_ASSOC);
if($result){
 $result = "<script>
 $("header nav").append(
  $("<a />").attr("href", "admin.html").text("Admin panel")
 )
</script>";
}
return $result;

然后运行它。当用户重定向到网站时,我会再做一次检查。

最佳答案

相反,考虑结构化响应

虽然您要求的是可行的,但有更好的方法来处理这个问题。考虑改为返回一个数组,其中包含使用客户端脚本构建链接所需的数据。构建 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>

PHP 端生成响应

$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
]);

关于javascript - 是否可以通过 ajax 从 php 返回 javascript 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46895032/

相关文章:

javascript - 我应该如何在最后一行数据之后添加行(不带标题)(不覆盖 "Master_db"中的任何内容)

javascript - JQuery 不再循环遍历元素

javascript - 仅循环遍历嵌套结构中定义的 JSON 对象 - JQUERY

javascript - $(function() vs jQuery(document).ready

javascript - 无法使用 jQuery 向元素添加属性

javascript - 在 ddSlick 下拉列表中获取所选 <option> 的值

php - 加载 gRPC 二进制模块失败(gRPC php 教程)

php - 输入文本(html表头的mysql表列)

PHP+MySQL UPDATE 查询(多列)不起作用

javascript - 绑定(bind)单击以选择选项但不绑定(bind)到选择元素本身