`

IE11 粘贴数据用AJAX提交老是失败

    博客分类:
  • JS
阅读更多

最近做的项目中有这么一项功能:从Excel里面赋值数据,粘贴到页面里面的input框里。当然,这些input框也可以接收手动输入的数据。这项功能原本没什么问题,在IE(6、7、8、9、10)、狐火两大系列都没有问题。后来微软发布了IE11,客户那边也自动更新成了IE11,此时在录入数据的时候就开始报错,根本就录不进去,也没错误提示。用debug查看的时候,发现根本就没有进入AJAX指定的URL代码,而是直接就往error函数里面跑了,查看Error的参数,发现此时readyState=4(已完成),status=0(未初始化),是在不明白怎么会出现这种情况。以为是JQuery的问题,就手动录入了一个数据,发现手动录入的没问题,就排除了Jquery的嫌疑。

 

没法,用最原始的AJAX,创建xmlHttp对象,然后open,send。再次运行的时候发现,代码一运行到open就开始报错:拒绝访问。去网上查,说“拒绝访问”多半是跨域的问题,可是我的项目从头到尾都只是在本地运行根本就不存在跨域问题啊,再说了要说跨域,手动输入的时候怎么不报错呢,为以防万一,还特意处理了跨域的问题,结果还是拒绝访问。看来不是跨域的问题啊。

 

后来朋友提醒我说,他上次弄一个功能,也出现这中状况,有些可以保存成功,有些不可以,他当时给Ajax的代码加了个延迟setTimeout,问题就解决了,让我也试试。我就死马当活马医了,抱着试试看的心态开始试,当时他用的是火狐(更准确点是HTML5),我用的是IE11(也是HTML5),两者可能有关系。

 

然后写了代码,开始测试,手动录入一直没问题,从Excel上复制一个数据粘贴上午,嘿,竟然能保存。有苗头。我就复制了3个,以为可以保存3个,结果却只保存了一个,我还以为是setTimeout的关系呢,因为网上不是说setTimeout只执行一次啊。一个意外,我复制完了数据直接把页面关了,再次打开时,发现一个数据都没存上,嘿,这不对啊,至少的存一个啊。后来发现,其实存上去的那个数据,不是因为粘贴后存上的,而是粘贴完了鼠标移开的时候出发了onblur事件,这个数据是onblur事件存上去的。为了验证,我粘贴完了,在每个input框里点了一下,果不其然,三个数据都存进去了,怪不得呢,每次复制了三个存进去的永远都是最后那一个。

 

这个怪了啊,我明明延迟了,它应该延迟了规定的时间之后再开始执行啊。于是,接着DEBUG。(这里需要说明一点,我从Excel上复制的数据可能会有很多行很多列,通过处理之后,弄成了一行一行的数据,然后再对每一行for循环,循环出一个一个的数据,每循环一个,调用相应方法进行保存。)发现代码运行到setTimeout时,代码根本就不会等0.01秒(我设的延迟时间为0.1秒)而是直接略过方法接着往下循环,那个方法下面的代码也不执行了,到最后保存数据的方法一次都没执行。我的数据自然就一个都没保存上。

 

这是个什么情况啊,网上查,说让for循环sleep根本就不可能,它最多是直接略过也不会等。大家都知道,JS里面有没有sleep方法,这可咋整啊!嘿,for循环不能,我到那个方法(方法名:saveData)里面暂停总行吧!然后把Ajax执行的那个代码提炼成一个方法(ajaxFun(param1,param2)),在saveData里面加上setTimeout("ajaxFun("+param1+","+param2+")",10),然后复制三条数据测试。原本以为绝对能成功呢,但事与愿违啊,结果跟放在for循环一样的,什么都没存上。这是个什么情况。觉得可能是setTimeout("ajaxFun("+param1+","+param2+")",10)方法格式写错了,换成单引号,结果还是有问题。于是我火了,我不提出来了,我直接function,setTimeout(function(){Ajax代码},10),然后再执行,终于好了。哎,折腾的我啊!

 

然后我去测试其他的输入情况,发现又保存不了了,什么情况,F12,查看JS,发现里面的JS竟然是先前的(就是setTimeout("ajaxFun("+param1+","+param2+")",10)的样子),于是清除历史记录,再测试,还是一样。重启浏览器,结果依旧。没办法了,直接重启服务器,再查,代码终于改过了了,执行也成功了。哎,这IE11的缓存太牛X了。

 

综合以上可以得出至少两个结论:

1、IE11在处理多数据时,可能会晕,然后报莫名其妙的错,你得刻意让它慢下来,一个一个来,否则出了问题都不知道问题出在哪儿。

2、IE11的缓存真的很牛X,用它自带的“删除浏览的历史记录”(我是勾选了上面所有的选项)都不是很管用,哎,这孩纸不好管啊!

 

以上我弄这个问题的具体过程和得出的结论,充满了艰辛啊。虽然走了很多弯路,但也确实是学了不好东西!就把这个写下来吧,帮助我自己也帮助可能用得着的朋友吧!

分享到:
评论

相关推荐

    Excel中粘贴数据随数据源自动更新.pdf

    这种情况下,可以使用"粘贴链接"功能,使得粘贴的数据随数据源自动更新。以下是对这个知识点的详细解释: 1. **粘贴链接功能**: 粘贴链接是Excel中的一个高级功能,它不同于普通的复制粘贴。在普通粘贴中,数据被...

    F11粘贴、密码复制粘贴好用

    标题中的"F11粘贴"指的是在某些软件或操作系统中,使用F11快捷键进行内容的快速粘贴功能。这种功能通常是针对程序员、文本编辑者等用户设计的,为了提高他们的工作效率。在某些特定环境下,例如编程环境中,F11可能...

    F11粘贴工具

    标题中的"F11粘贴工具"可能是指一个专门优化或增强Windows系统中F11键功能的软件,使得用户可以通过按下F11快捷键来进行高效地复制和粘贴操作。在许多应用程序中,F11通常用于全屏显示,但这个工具可能是将其重新...

    右键粘贴数据到DataGridView示例

    4. **数据解析**:根据粘贴的数据格式,可能需要使用`String.Split`、正则表达式或第三方库(如EPPlus)来解析数据。如果是CSV格式,可以直接按照逗号分隔;如果是Excel格式,可能需要使用Excel相关的API来读取。 5...

    excel 宏举例循环复制粘贴数据

    ### Excel宏示例:循环复制粘贴数据 在日常工作中,Excel不仅是一款强大的数据分析工具,也是提高工作效率的重要手段之一。特别是在处理大量重复性任务时,通过编写简单的宏命令可以极大地节省时间并减少错误发生的...

    使用自动化在Excel中粘贴数据

    在Excel中,自动化数据粘贴是一项非常实用的功能,它能够帮助用户提高工作效率,减少重复的手动操作。在处理大量数据时,尤其对于需要频繁复制和粘贴的工作场景,自动化技术可以显著提升工作流程的效率。以下我们将...

    C# Clipboard剪贴板粘贴数据实例

    本教程将深入探讨如何在C#中使用Clipboard类来实现剪贴板数据的粘贴功能。 首先,让我们了解`Clipboard`类的基本用法。`Clipboard`类是.NET框架的一部分,它包含了一系列静态方法,可以直接调用而无需创建对象实例...

    js粘贴图片(可以显示或上传)仅支持IE11,chrome,firefox

    - IE11并不支持现代的`Clipboard API`,但可以使用`document.execCommand('paste')`方法来实现粘贴功能。然而,这种方法对剪贴板数据的访问有限,无法直接获取图片数据。 - Chrome和Firefox支持`Clipboard API`,...

    实现网页表格输入框批量粘贴

    网页表格批量粘贴功能是网页开发中的一个实用技巧,它允许用户从Excel或其他来源复制数据,然后一键粘贴到网页的表格中,极大地提高了数据录入的效率。在本实例中,我们将探讨如何利用JavaScript实现这一功能,特别...

    自动办公-35 Python从Excel表中批量复制粘贴数据到新表

    本主题将深入探讨如何利用Python从Excel表格中批量复制并粘贴数据到新的工作表,提高办公自动化水平。 首先,我们需要了解的关键知识点是Python的pandas库,它是用于数据分析的强大工具。pandas提供了DataFrame对象...

    兼容IE FF复制粘贴

    兼容IE FF复制粘贴 在IE6、IE7、IE8、FireFox中均测试通过

    使用editplus的列选择省力粘贴

    - 当需要将数据粘贴回EditPlus时,可以使用“编辑”菜单下的“剪贴板”子菜单中的“作为列粘贴”(快捷键Ctrl+Shift+V)。这一功能能够确保数据按照原有的列结构进行粘贴,避免了数据错位的问题。 #### 五、实际...

    【C#源码】DataGridView复制粘贴

    在C#编程中,`DataGridView`控件是一个用于显示数据表格的强大工具,它允许用户以交互方式查看和编辑数据。本篇文章将深入探讨如何实现`DataGridView`中的复制和粘贴功能,使其操作体验类似Excel。 ### 1. `...

    复制粘贴输入数据的最好工具强力剪贴板

    强力剪贴板是一款高效的数据输入工具,专门设计用于优化日常的复制和粘贴操作,极大地提高了工作效率。在传统的操作系统功能中,我们通常只能一次性复制一个内容,然后逐一粘贴,但这款工具打破了这一限制,提供了...

    vb 6.0 VSFlexGrid 复制 粘贴

    3. **将数据写入剪贴板**:使用`Clipboard.SetText`方法将数据保存到剪贴板中。 #### 知识点四:代码实现——复制功能 ```vb ' 清空剪贴板 Clipboard.Clear ' 获取选中数据 Dim clip As String clip = GetSelected...

    Ajax控件集合(包含各种常用控件原码)

    4. **Ajax表单提交**:通过Ajax,表单可以无刷新提交,用户可以在提交后立即看到反馈,无需等待整个页面刷新。 5. **Ajax时间选择器**和**日期选择器**:提供易于使用的用户界面,让用户可以方便地选择和输入日期和...

    复制粘贴Excel数据.docx

    在上面的例子中,如果部门采购清单需要更新,可以快速复制设计部、编辑部和公关部的物品单价、数量和总计,然后使用“选择性粘贴”中的“加”选项,将新数据与现有数据相加,从而得到新的总计,而无需手动计算每个...

    VC中剪贴板简单复制粘贴操作

    例如,对于文本数据,可以先使用`GlobalAlloc()`分配内存,再用`GlobalLock()`锁定内存,接着使用`lstrcpy()`复制字符串,最后解锁并关闭内存(`GlobalUnlock()`)。 3. **获取剪贴板数据**: 使用`...

    excel复制数据,粘贴到页面表格插件.zip

    本项目提供的"前端实现excel复制数据,粘贴到页面表格工具.zip"就是一个解决此类问题的实例。下面将详细介绍这个项目及其相关知识点。 首先,项目中包含三个文件:test.html、jquery.min.js和tableCJ。`test.html`...

    C#使用剪切板粘贴数据

    在C#编程中,剪切板(Clipboard)是.NET Framework提供的一种系统级服务,它允许程序之间进行数据交换,常见的操作包括复制、剪切和粘贴。本篇将详细讲解如何在C#中利用剪切板功能来实现数据的粘贴。 首先,剪切板...

Global site tag (gtag.js) - Google Analytics