【问题标题】:jQuery $.post() + IE8jQuery $.post() + IE8
【发布时间】:2011-07-27 13:29:33
【问题描述】:
<script type="text/javascript" src="/scripts/jquery-1.6.2.min.js"></script> 
<script type="text/javascript" src="/scripts/jquery.form.js"></script> 

<script type="text/javascript"> 
$(document).ready(function(){
$("#SendReply").click(function(){                                      
    $(".error").hide();
    var hasError = false;
    var pathname = window.location.pathname;
    var random = Math.random();

    var messageVal = $("#InquiryResponse").val();
    if(messageVal == 'Type your response in this space ...') {
        $("#InquiryResponse").after('<span class="error"><br><br><font color="red">You forgot to type your response to the inquiry. Please type it in the above space and submit again.</font><br></span>');
        hasError = true;
    }


    if(hasError == false) {
        $(this).hide();
        if (jQuery.browser.msie != true) {
        $.post( "",
            { Detail: messageVal},
                function(data) {
                    //alert("For non IE");
                    $("#InqRespForm").slideUp("slow", function() {                 
                         $("#InqRespForm").before('<h1>Success</h1><p><font color="green">Your message has been sent.</font></p>');                             

                });
        });
        }
        if (jQuery.browser.msie == true) {
            jQuery.ajaxSetup({async:false});

            $.post( pathname , { Detail: messageVal},function(data)
                {

                    $("#InqRespForm").width($("#InqRespForm").parent().width()).slideUp("slow");
                    $("#InqRespForm").before('<h1>Success</h1><p><font color="green">Your message has been sent.</font></p>');                  
                });
            jQuery.ajaxSetup({async:true});         
        }   


    }

    return false;
});                        
});
</script> 





<form action="" method="post" id="InqRespForm" name=InqRespForm>
Reply to the above Inquiry : <br/>
<textarea rows="7" name="Detail" id="InquiryResponse" cols="60" colspan=2>Type your     response in this space ...</textarea>
<br/>

<input id="SendReply" name="Send" type="submit" value="Send Response" alt="Reply to  Inquiry" /> 

</form>

在提交表单时,我会发送一封电子邮件。它适用于 FF、Chrome 等。但我已经秃头试图在 IE8 中进行这项工作。如果你能指出解决方案,我会给你买啤酒。

【问题讨论】:

  • 为什么你让 IE 同步发布而不是其他浏览器?
  • 没有理由 - 我发布的内容在我尝试了所有内容后经过两天的演变。没有什么能让它发挥作用。请注意 - 前端行为没有任何问题。表单确实向上滑动并显示消息已发送 - 只有在 IE8 中没有发送消息。我认为问题在于 IE 上的 $.post 。我可能是错的。几天前我开始使用 jQuery。

标签: jquery internet-explorer-8 .post


【解决方案1】:

我想通了。我将在此处发布解决方案,以防将来对某人有所帮助。问题出在我发布到的网址上。我的 url 是一个参数化的 url,我一直使用错误的语法/格式。 IE 和非 IE 的分离并不是真正需要的。答案在于提取当前 url 的各个组成部分,并通过“data”数组将其传递到 $.post 中。感谢您的投入。工作代码如下:

<script type="text/javascript" src="/scripts/jquery-1.6.2.min.js"></script> 
<script type="text/javascript" src="/scripts/jquery.form.js"></script> 
<script type="text/javascript" src="/scripts/jquery.url.js"></script>
<script type="text/javascript"> 
$(document).ready(function(){
$("#SendReply").click(function(){                                      

    $(".error").hide();
    var hasError = false;
    var pathname = window.location.pathname;
    var random = Math.random();
    var kar_ = $.url.param("kar"); 
    var obj_ = $.url.param("obj");
    var me_ = $.url.param("me");


    var messageVal = $("#InquiryResponse").val();


if(messageVal == 'Type your response in this space ...') {
    $("#InquiryResponse").after('<span class="error"><br><br><font color="red">You forgot to type your response to the inquiry. Please type it in the above space and submit again.</font><br></span>');
    hasError = true;
}


if(hasError == false) {
    $(this).hide();

    $.post( "inqdetails.asp",
        { Detail: messageVal, kar: kar_, obj: obj_, me: me_},
            function(data) {

                $("#InqRespForm").slideUp("slow", function() {                 
                     $("#InqRespForm").before('<h1>Success</h1><p><font color="green">Your message has been sent.</font></p>');                             

            });
    });

}

return false;
});                        
});
</script> 

【讨论】:

    【解决方案2】:

    你为什么这样做:jQuery.browser.msie ????

    几乎没有理由检测浏览器!而且我在你的代码中完全看不到任何需要知道浏览器是什么的东西。

    【讨论】:

    • 我认为他们这样做是为了消除在 IE8 上可能很慢的动画,因为它的 JavaScript 执行速度非常慢。
    • 我对 msie 的做法有所不同,因为 - 如果您注意到,我正在尝试将表单发布到同一页面中,而 url="" 在所有浏览器中都可以使用,但在IE。另一方面,如果我使用 pathname 变量明确指定 url,它在 FF 或 Chrome 中不起作用。
    • 如果有帮助,我的 url 看起来像这样 -"[link]test.mysite.com/sho/me/tails.asp?krm=I&obj=3193&mid=709" 你认为 /tails.asp 中的参数有问题吗?krm=I&obj=3193&mid=709 有问题吗?
    • 为什么不使用 document.location 而不是路径名?我个人不喜欢在 url 中包含参数,而是将它们放在 data 参数中,但这表示它应该仍然可以正常工作。
    【解决方案3】:

    将这一行放在 HTML 中

    标记开始之后
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    

    它适用于 IE8+

    【讨论】:

      【解决方案4】:

      $.post( "", ... ) 可能是导致问题的原因。我发现它适用于除 IE 之外的大多数浏览器。

      宁可使用$.post(window.location, ... ) 发布到同一页面。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-14
        • 2011-03-27
        • 2013-02-23
        • 2013-01-10
        相关资源
        最近更新 更多