var script = document.createElement("script"); script.type = "text/javascript"; script.src = "http://bbb.com"; var head = document.getElementsByTagName("head")[0]; head.insertBefore(script, head.firstChild);
jquery已经将所有的调用封装成对象,调用起来很方便 js跨域写起来比较麻烦,尤其是传递参数的时候,需要手动拼接data ?&p1=1&p2=2 但是jquery的跨域有个bug,当同时发出大量请求瞬间返回结果时,会导致接收请求的时候丢失部分回调请求(实际上已经发送成功了) 例:
这种情况很常见,就是循环发送ajax请求么。 非跨域请求这么写没有问题,success会被调用100次,但是当dataType : "jsonp"时,success可能只会执行70次80次,剩下的请求没有成功也没有失败,用complete也抓不到。 浏览器会报错找不到callback,或无任何提示。有两个地方会引起这种问题
// Clean-up function jqXHR.always(function() { // Set callback back to previous value window[ jsonpCallback ] = previous; // Call if it was a function and we have a response if ( responseContainer && jQuery.isFunction( previous ) ) { window[ jsonpCallback ]( responseContainer[ 0 ] ); } });
1.callback被清除,所以有时候会报出找不到callback这个方法 2.xmlHttp.readyState==4 同时发送请求的时候,浏览器的状态只有这么一个readyState当浏览器知道已经获取返回结果了,就不接收请求了 这个肯定是jquery的bug,使用js跨域没有问题
原文:http://www.cnblogs.com/liuyouying/p/5051936.html