尝试在链接单击时使用 ajax 在后台打开 php 文件


Trying to open a php file in background using ajax on link click

我想在单击链接时在后台打开一个 php 文件,而不是向用户显示指向 php 文件的链接。

我意识到做到这一点的唯一方法是使用 ajax。

但它不起作用,而不是在后台打开新的 php 页面,而是什么也没发生,php 代码不执行。

我的JavaScript

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script type="text/javascript">
    $('a#run-php-script').click(function(e){
        e.preventDefault();
        $.ajax({
            type: 'POST',
            url: 'http://mywebsiteaa.com/myfile.php?addId=<?php echo $add->id); ?>'
        });
        return false;
    });
</script>

我的网页

<a id="run-php-script" href="#">clickit</a>

请注意,当我将 php 链接放入 html href 标签时,我的 php 脚本可以完美运行。但问题是它向用户揭示了我的 php 文件 url,我不希望用户看到它,也不希望在可能的情况下在新选项卡中打开它,而是在后台打开。

我也用GET而不是POST尝试过,仍然不起作用。

请帮忙谢谢


更新 - 根据用户请求,我已将其更改为按钮。 我也忘了包装标签。 但它仍然不起作用。

新 JS

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() { 
    $('#run-php-script').click(function(){
        $.ajax({
            type: 'POST',
            url: 'http://mywebsiteaa.com/myfile.php?addId=<?php echo $add->id); ?>',
        success: function(){
            alert('success');
        },
        error: function(){
            alert('failure');
        }
        });
        return false;
    });
});
</script>

新网页

<input id="run-php-script" type="button" name="someBtn" value="clickit" />

当我单击按钮仍然没有任何反应时.php页面无法在后台打开。

我在上面的脚本中添加了成功代码。 但即使它说"成功"弹出窗口,实际的 PHP 页面仍然不会在后台打开并执行,只是什么也没发生。

请帮忙谢谢

这里有两件事出错:

  • 该链接具有target="_blank"属性,因此单击它将在新选项卡中打开href,您应该将其删除。
  • 事件处理程序不会阻止链接的默认操作

如果您根本不希望浏览器处理链接,则应将 preventDefault(( 调用添加到处理程序

例如

$('a#run-php-script').click(function(e){
    e.preventDefault();
    ...
});

请使用 Chrome devTools 网络标签来检查是否发送了任何表单数据。

添加一个按钮而不是一个链接,

 <input id="run-php-script" type="button" name="someBtn" value="clickit" />

在此按钮上注册您的点击事件,

 $('button#run-php-script').click(function(e){
    $.ajax({
        type: 'POST',
        url: 'http://mywebsiteaa.com/myfile.php?addId=<?php echo $add->id); ?>'
    });        
});

尽管我无法让它与 ajax 一起工作,但我能够让它以另一种方式工作。我没有使用ajax,而是将链接/输入转换为按钮并将其作为表单提交。我能够填充它并且它有效!现在用户可以推断URL,但前提是他们知道自己在做什么。不再有任何完整的 url,而是以某种方式对 url 进行模糊处理,以便用户无法像链接时那样看到 URL。


这是我的最终工作代码。我努力测试了一下,终于有了解决方案!

(没有使用JavaScript或Ajax,只是一个标准的表单元素(

.html

<form action="http://mywebsiteaa.com/myfile.php" method="post">
    <button type="submit" name="addId" value="<?php echo $add->id); ?>">clickit</button>
</form>

这是几件事。


  1. name=这样做是在?之后添加该名称值。因此,例如,通过将名称值addId,它会将其添加到 URL: ?addId=


  2. value=现在对于值,这是决定在末尾附加什么的变量。所以我获取了我需要的值并将 PHP 代码插入value字段中。

例如,假设我对这个页面的$add->id999。这将导致999之后被附加如下:?addId=999 .

  1. 你需要它是一个按钮,因为如果它是输入的,那么文本将是值的名称,所以不是按钮文本的"clickit",而是读作"999",你不希望这样,所以让它成为一个按钮而不是输入。

这个简单的解决方案更好的是它可以做我想要的一切:

a( 它不会打开任何新页面

b(它在后台运行PHP代码

c( 用户看不到链接。是的,如果他们知道html编码,他们可以将链接放在一起,但大多数人不会知道哪个非常适合我的使用。


因此,当我单击按钮时会发生什么:

a( 它组合字符串和值并将其连接到 URL

b(它在后台执行PHP文件,没有新页面

c( 用户永远看不到完整的网址

所以在实践中,这就是 html 对用户来说的样子:

<form action="http://mywebsiteaa.com/myfile.php" method="post">
    <button type="submit" name="addId" value="999">clickit</button>
</form>

当用户单击按钮时,它会在后台打开此php文件:

http://mywebsiteaa.com/myfile.php?addId=999

但是此链接不会在任何新窗口中打开,而是在后台完成,因此用户永远不会看到该完整链接。


这提供了出色的用户体验。还有一定程度的隐私。

如果你的文件很关键,这对你不起作用,因为用户仍然可以将名称和值放在一起,使字符串成为 url,但大多数用户不知道这一点,对大多数人来说太复杂了。但有可能,所以如果数据是敏感的,那么你不应该使用这种方法。相反,您甚至不应该首先打开 php 文件,相反,您应该在后台通过服务器发送所有内容,完全不同。

但是,如果数据不是关键的,并且如果 1,000,000 个用户中有 1 个左右的人认为足够努力地将其放在一起,那没关系,那么这个按钮方法将做你想要的。

享受!