我在编写程序时遇到问题。我的想法是单击一个链接,并在JavaScript变量中获取链接的值。然后我做一个GET请求将值发送到PHP变量并打印出来。
以下是代码:
HTML
<html>
<head>
<script src= "http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
</head>
<body>
<div id='mydiv'>
<a href='/codeigniter/index.php/hashtest/hi'>Link 1</a>
<a href='/codeigniter/index.php/hashtest/hi'>Link 2</a>
</div>
</body>
</html>
jQuery (位于上方正文中的<script>
标记内)
$(function()
{
var mydiv = $('#mydiv');
mydiv.on('click', 'a', function(){
var text = $(this).text();
console.log(text);
//$.get("hashtest.php", {qwerty: text});
$.ajax
({
url: "/codeigniter/index.php/hashtest/hi",
data: {
qwerty : text
},
async: "false",
success: function(data){
console.log("success!");
},
error: function(jqXHR, status, error)
{
alert("Status : " + status + " error: " + error);
}
});
});
});
PHP
class Hashtest extends CI_Controller {
function __construct() {
parent::__construct();
}
public function hi() {
$x = $this->input->get('qwerty');
print $x;
print "";
}
}
错误:
NS_ERROR_NOT_AVAILABLE: prompt aborted by user
目前,JavaScript正确获取正确的链接值,因为console.log()行为两个链接输出正确的内容。但似乎PHP没有收到这个值,因为没有打印出来。我试过用硬编码的字符串替换变量,但没有区别。我可以在上面的方法中打印静态PHP,所以我不认为这是一个我根本无法打印任何PHP的问题。
几点:
我使用$ .ajax而不是$ .get只是为了看看会出现什么错误消息 出现(理想情况下我想使用$ .get)。这似乎是一些 基于我读过的有关上述内容的未被捕获的异常 错误消息以及出现的警报框没有的事实 显示错误消息,只是状态为“错误”。
我不指望任何价值回归,成功方法就在那里 看看请求是否正在进行(目前不是)
我假设链接的ID未知。
代码都在同一个类和我指向的URL中 在AJAX请求中是正确的(我的HTTP中有一个HTTP 200代码 浏览器控制台)。
PHP是使用CodeIgniter框架编写的。
答案 0 :(得分:3)
您需要阻止关注链接的默认操作:
$(function()
{
var mydiv = $('#mydiv');
mydiv.on('click', 'a', function(e){
e.preventDefault(); // <-- THIS IS NEEDED
var text = $(this).text();
console.log(text);
//$.get("hashtest.php", {qwerty: text});
$.ajax
({
url: "/codeigniter/index.php/hashtest/hi",
data: {qwerty : text},
async: "false",
success: function(data){
console.log("success!");
},
error: function(jqXHR, status, error)
{
alert("Status : " + status + " error: " + error);
}
});
});
});
答案 1 :(得分:0)
您的代码是正确的,但是当您点击链接时不会停止活动。
添加e.preventDefault();
var mydiv = $('#mydiv');
mydiv.on('click', 'a', function(e){
e.preventDefault();
var text = $(this).text();
</code>