jQuery / Ajax调用 - 它在IE7上不起作用

时间:2010-07-10 19:23:45

标签: php jquery ajax internet-explorer

我创建一个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请求不适用。如果我刷新页面,是的它有效。嗯...我真的不知道如何解决这个问题...

7 个答案:

答案 0 :(得分:2)

好吧,我不确定这里的问题是什么,但我认为你可以通过简单地让jquery处理click而不是标签上的inline属性来解决这个问题。

首先更改您的链接,以摆脱内联事件

<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或跨度会破坏您的标记。