概述

最近工作中使用ajax,有时会报json4 is not a function的错误,有时又不会报错。找了很久,网上说是因为多次请求同一个资源导致的,但是我检查了自己的代码,对于重复资源并没有重复请求,并且,按理说,即使同时请求同一个资源也不应该报这个错误。

最后终于发现原因了,是因为timeout超时填的是5000,但由于资源加载,这个ajax从开始请求到接收到资源的总时间超过了5s,所以报了这个错。

总结一下,报这个错的原因是timeout字段设置太小了。

解决方案

那怎么解决呢?

方法之一是去掉timeout。但是对于移动端来说,我还是倾向于加上timeout。

通过检查代码,发现这个ajax请求这么长时间的原因是,有一段js插入了图片,从而导致图片资源和ajax几乎同时进行http请求,但是图片资源的http请求优先度比较高,所以先加载图片,但是在加载图片之前,由于ajax发送了请求,所以timeout已经开始计时了,等到图片加载完成,ajax返回数据的时候,所用总时间已经超过了timeout值。

所以方法之二是对那些图片使用懒加载,但是代码改动比较大,而且体验也没那么好。

方法之三是,移动代码,使这个ajax请求返回了值之后再加载插入图片的js代码。这个我本来不怎么认同的,但是这么处理之后,性能有很惊人的优化,找不出原因。最后我使用了这种方案。

我学到了什么

  1. ajax的timeout导致的报错和解决方案。
  2. 图片资源的http请求优先级高于ajax。(不论谁先发出http请求)

ajax jsonp请求报错not a function的解决方案的更多相关文章

  1. 使用laravel框架开发接口时ajax post请求报错419

    nginx服务器,使用laravel框架开发后台接口.get请求正常,但是post请求一直报错.H5和APP都不成功,code=419. 解决办法: 找到 VerifyCsrfToken.php文件( ...

  2. jsonp多次请求报错 not a function的解决方法

    添加时间戳给callbackId $.ajax({ type: "get", url: url, timeout: 6000, data: param, cache: false, ...

  3. ajax post 请求报错Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' heade

    jquery ajax跨域请求,webapi webconfig配置 前台代码(放了一部分) function CheckIn(roomno) { $.ajax({ url: 'https://www ...

  4. JS请求报错:Unexpected token T in JSON at position 0

    <?php /* 最近做一个ajax validate表单验证提交的代码,在ajax提交的时候 JS请求报错:Unexpected token T in JSON at position 0 描 ...

  5. flask+sqlite3+echarts2+ajax数据可视化报错:UnicodeDecodeError: 'utf8' codec can't decode byte解决方法

    flask+sqlite3+echarts2+ajax数据可视化报错: UnicodeDecodeError: 'utf8' codec can't decode byte 解决方法: 将 py文件和 ...

  6. linux下, 再次遇到使用thinkphp的模板标签时,报错used undefined function \Think\Template\simplexml_load_string() 是因为没有安装 php-xml包

    linux下, 使用thinkphp的模板标签,如 eq, gt, volist defined, present , empty等 标签时, 报错: used undefined function ...

  7. Xcode7 beta 网络请求报错:The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.

    Xcode7 beta 网络请求报错:The resource could not be loaded because the App Transport Xcode7 beta 网络请求报错:The ...

  8. Xcode7 beta 网络请求报错:The resource could not be loaded because the App Transport

    Xcode7 beta 网络请求报错:The resource could not be loaded because the App Transport Xcode7 beta 网络请求报错:The ...

  9. nuget包管理nuget服务器发布包时出现请求报错 406 (Not Acceptable)

    在window服务器上部署nuget服务器时,发布包时出现请求报错 406 (Not Acceptable) 验证用户名.密码正确的情况下,还是出现上面错误.后面跟踪服务器日志,发现window\te ...

随机推荐

  1. .NET、JAVA和PHP在Web开发的优缺点

    现在做Web开发,用哪个平台哪种语言其实本质上没有太大的区别,因为Web开发框架已经非常成熟,只要符合需求,能按时交付产品就ok了. 要选择哪个平台,是个商业问题,不是技术问题. 选择任何的语言最好深 ...

  2. Swoole addProcess的使用

    addProcess函数 是添加一个用户自定义的工作进程.这个有什么用呢?服务在启动后,可以用于监控.上报或者其他特殊的任务. 注意这个添加的进程是被manager进程管理的.如果这个添加的用户进程经 ...

  3. python json.dumps()函数输出json格式,使用ensure_ascii参数对中文输入的支持

    在python使用过程中,输入中文,不能正常的输出,可以使用ensure_ascii参数来解决不能输入中文的问题 代码块: import json friends={"name": ...

  4. Task与线程池

    尽量使用Task,而不是线程池 因为Task是基于线程的,单不是一一对应的 Task的切换与开销要比线程小很多,也更容易管理 http://www.cnblogs.com/yunfeifei/p/41 ...

  5. java数据结构至对称矩阵压缩存储

    刚刚刷java选择题,遇到的对称矩阵压缩存储问题,我们知道对称矩阵是aij=aji的矩阵,压缩存储可以采用一维数组和二维数组存储. 此处只讨论一维数组存储的形式,设数组下标从0开始,对称矩阵为n维矩阵 ...

  6. OO第二次作业总结

    OO~第二次作业总结 连续三周的电梯作业结束了,总的来说这三次作业做的还算平稳,既没有被刀,也没有刀中别人.那么接下来开始谈谈我对这三次作业的认识. 一.设计策略 我三次作业的设计思路基本上是相同的, ...

  7. 虹软人脸检测和识别C# - API

    using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D ...

  8. Windows 自动化补丁管理

    Windows 自动化补丁管理 Desktop Central,这一倍受欢迎的补丁管理软件旨在修补可能导致安全薄弱.破坏关键系统数据或导致系统不可用的漏洞.管理此类软件漏洞对网络管理员来说简直是噩梦. ...

  9. php发送http put/patch/delete请求Demo

    CURL请求对于PHPer是必备技能,使用curl_opt函数来发送各式各样的http请求动作,不仅限于get和post.在测试自己的restful api的时候,通过访问这个代理发送http put ...

  10. MySQL的计算时间差

    一.MySQL计算两个日期的时间差 TIMESTAMPDIFF(DAY, datetime1, datetime2); 第一个参数为比较类型,有day, month, year, hour等: 第二个 ...