我想在单击链接时在后台打开一个 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>
这是几件事。
name=
这样做是在?
之后添加该名称值。因此,例如,通过将名称值addId
,它会将其添加到 URL:?addId=
value=
现在对于值,这是决定在末尾附加什么的变量。所以我获取了我需要的值并将 PHP 代码插入value
字段中。
例如,假设我对这个页面的$add->id
是999
。这将导致999
之后被附加如下:?addId=999
.
- 你需要它是一个按钮,因为如果它是输入的,那么文本将是值的名称,所以不是按钮文本的"
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 个左右的人认为足够努力地将其放在一起,那没关系,那么这个按钮方法将做你想要的。
享受!