我创建一个Jquery函数(暂时)以函数方式调用函数并使用警报打印它。用firefox,chrome:它有效!当我尝试IE7(第一次)时,它失败了。如果我重新加载页面(F5)并重试,它的工作原理! O_O
我终于理解为什么会这样。在我的旧网站中,我使用了jquery-1.3.2.min.js库。在这个我使用jquery-1.4.2.js,事实上它不起作用。那么这是什么一回事?这个新版本中有一个错误?
欢呼声
实际功能(与Bryan Waters建议):
// html page
<a href="#" onClick="pmNew('1');return false">prova</a>
// javascript page
function pmNew(mexid) {
var time = new Date;
$.ajax({
type: 'POST',
cache: false,
url: './asynch/asynchf.php' + '?dummy=' + time.getTime(),
data: 'mexid='+escape(mexid)+'&id=pmnew',
success: function(msg) {
alert(msg);
}
});
return false;
}
// ajax.php
if($_POST['id']=="pmnew") {
echo "please, i will just print this";
}
Fiddler结果:如果我使用http://localhost/website fiddler并不捕获流。如果我使用http://ipv4.fiddler/website它捕获流,但在ajax请求不适用。如果我刷新页面,是的它有效。嗯...我真的不知道如何解决这个问题...
答案 0 :(得分:2)
首先更改您的链接,以摆脱内联事件
<a class="lblueb" href="./asynch/asynchf.php?mexid=<?$value?>"><?=value?></a>
然后在页面头部的javascript中添加一个document.ready事件函数,如果你还没有这个函数:
$(function(){
});
然后使用类将click事件绑定到ready函数内的链接,让它从href属性中拉出mexid,然后调用你的pmNew函数:
$(".lblueb").click(function(e){
e.preventDefault();
//your query string will be in parts[1];
parts = $(this).attr("href").split("?");
//your mexid will be in mexid[1]
mexid = $parts[1].split("=");
//call your function with mexid[1] as the parameter
pmNew(mexid[1]);
});
您的最终代码应如下所示:
<script type="text/javascript">
function pmNew(mexid) {
$.ajax({
type: "POST",
url: "./asynch/asynchf.php",
data: "mexid="+mexid+"&id=pmnew",
success: function(msg){
$("#pmuser").html('<a class="bmenu" href="./index.php?status=usermain">PANEL ('+msg+')</a>');
}
});
}
//document.ready function
$(function(){
$(".lblueb").click(function(e){
//prefent the default action from occuring
e.preventDefault();
//your query string will be in parts[1];
parts = $(this).attr("href").split("?");
//your mexid will be in mexid[1]
mexid = $parts[1].split("=");
//call your function with mexid[1] as the parameter
pmNew(mexid[1]);
});
});
</script>
答案 1 :(得分:2)
最好的调试方法是下载Fiddler,看看HTML流量是什么,浏览器是否发出了ajax请求,结果是200或404等等。
即使在帖子上我也遇到了IE缓存问题。甚至没有发出请求。我通常在javascript中创建一个日期对象,并添加一个虚拟时间戳,只是为了使网址唯一,因此不会被缓存。
答案 2 :(得分:0)
我相信你的SQL代码有错误。 userd
应该是userid
吗?
Gaby绝对正确,您的SQL代码是开放式注入的。 请考虑learning PDO,这会显着降低SQL注入的可能性,尤其是在使用占位符时。这样你就会有查询($ sql)和执行($ sql),而不是代码直接进入你的数据库。
答案 3 :(得分:0)
作为一个习惯问题,你应该在脚本的早期处理你的请求变量,并将它们清理成死亡 - 然后将清理后的结果分配给新变量,并严格仅在脚本的其余部分使用它们。因此,只要在sql查询中或附近有请求变量,就应该响起警钟。
例如,至少你应该从任何可以打印回页面的内容中删除任何html标签。
除了在插入数据库时将引号转义为sql字符串的一部分之外。
我要快速编写代码 - 确保稍后将代码整理好......但是在做任何事情之前都要获得请求变量的安全性。你以后无法确定安全性。
无论如何对不起唠叨....至于你的实际问题,你有没有尝试过Gaby的建议:将你的HTML更改为:
<a class="lblueb" href="#" onclick="return pmNew('<?php echo $value; ?>')"><?php echo $value; ?></a>
然后将您的JS函数更新为:
function pmNew(mexid) {
$.ajax({
type: 'POST',
cache: false,
url: './asynch/asynchf.php',
data: 'mexid=' + escape(mexid) + '&id=pmnew',
success: function(msg) {
$('#pmuser').html('<a class="bmenu" href="./index.php?status=usermain">PANEL (' + msg + ')</a>');
}
});
return false;
}
另外,用IE - 检查显而易见的。清除浏览器缓存/历史记录
答案 4 :(得分:0)
我没有理解“失败”,但这是另一个例子..
function pmNew(mexid) {
$.post("./asynch/asynchf.php", {mexid: mexid, id: "pmnew"},
function(msg) {
$("#pmuser").html('<a class="bmenu" href="./index.php?status=usermain">PANEL ('+msg+')</a>');
}
});
}
答案 5 :(得分:0)
似乎有几个人面临这个问题。 其中一个人干净利落地安装了浏览器:
http://www.geekstogo.com/forum/topic/22695-errorpermission-denied-code0/
答案 6 :(得分:0)
检查以确保返回DOM的内容对指定的DOCTYPE 有效。
我有一个类似的问题,Chrome,FF和Safari都运行得很好,但在IE中找到了ajax结果。 检查以确保您的ajax结果中没有任何额外的div或跨度会破坏您的标记。