代码之家  ›  专栏  ›  技术社区  ›  Naveed

使用jQuery提交表单在IE8中无法正常工作

  •  1
  • Naveed  · 技术社区  · 14 年前

    jQuery查询 $.ajax() 似乎不能与IE8一起正常工作,但它可以与Firefox、Chrome和Safari一起工作。我已经提交了表格并回复了 格式。

    这是我的密码:


    测试.php:

    <script type="text/javascript" src="jquery-1.4.2.js"></script>
    <script type="text/javascript" src="jsFile.js"></script>
    
    <form action='_test.php' method='post' class='ajaxform'>
     <input type='text' name='txt' value='Test Text'>
     <input type='submit' value='submit'>
    </form>
    
    <div id='testDiv'></div>
    

    _测试.php:

    <?php
          $arr = array( 'testDiv' => $_POST['txt'] );
          echo json_encode( $arr );
    ?>
    

    jQuery('.ajaxform').live('submit', function(event) {
    
     $.ajax({
            url  : $(this).attr('action'),
            type : $(this).attr('method'),
            dataType: 'json',
            data : $(this).serialize(),
            success : function( data ) {
         for(var id in data) {
          jQuery('#' + id).html( data[id] );
         }
                }
        });
    
     return false;
    });
    

    行为:


    在Firefox、Chrome、Safari中:

    当我提交表格时 文本字段(txt) 已在中成功填充 不影响整个页面。

    当我提交表单时,它会在屏幕上显示json表单,如下所示: {"testDiv":"Test Text"}

    谢谢。

    6 回复  |  直到 14 年前
        1
  •  2
  •   Naveed    14 年前

    jQuery(document).ready(function(){
    
        jQuery('.ajaxform').submit( function() {
    
            $.ajax({
                url     : $(this).attr('action'),
                type    : $(this).attr('method'),
                dataType: 'json',
                data    : $(this).serialize(),
                success : function( data ) {
                            for(var id in data) {
                                jQuery('#' + id).html( data[id] );
                            }
                          }
            });
    
            return false;
        });
    
    });
    

        2
  •  1
  •   T.P.    14 年前

    仅供参考:

    Naveed,我尝试了你在win7上发布的IE8代码(在兼容和非兼容模式下),它在div中以纯文本而不是JSON格式正确地显示了“testtext”。

        3
  •  1
  •   sje397    14 年前
    1. 尝试将选择器更改为 input:submit :submit )
    2. 向ajax调用添加一个错误处理程序,看看它说了什么
        4
  •  1
  •   aularon    14 年前

    _test.php )应包含 : 而不是 ; ,正如@sje397所说。似乎其他浏览器都可以 ; ,但不是IE8,因此该值保留为字符串,而不是作为对象进行分析。

    编辑: 由于某些原因,您的数据没有转换为json,请尝试

    if(typeof(data)=='string') {
      data=$.parseJSON(data);
    }
    

    在你的头顶 success 看它是否有效。

        5
  •  1
  •   Reigel Gallarde    14 年前

    而不是

    for(var id in data) {
      jQuery('#' + id).html( data[id] );
    }
    

    你用过吗 $.each() ?

    jQuery.each(data , function(id, val) {
      jQuery('#' + id).html( val );
    });
    

    还有,你误解了 $(this) 我猜

    jQuery('.ajaxform').live('submit', function(event) {
    
      var $this = $(this); // add this line...
    
     $.ajax({
            url  : $this.attr('action'),
            type : $this.attr('method'),
            dataType: 'json',
            data : $this.serialize(),
            success : function( data ) {
         for(var id in data) {
          jQuery('#' + id).html( data[id] );
         }
                }
        });
    
     return false;
    });