data : 'aaaaa', //请求所传参数,
cache: false,
dataType : "jsonp",});
服务器返回的数据必须是: jsonpCallback([ {"isSuccess":"0" ]); 这样的格式,
这么理解这个呢, 其实就是如有一个 function jsonpCallback(data){.........}, 那么 jsonpCallback([ {"isSuccess":"0" ]); 就是调用这个function!
说到原理, 就是利用script标签能跨域执行脚本的功能, 并且执行后返回的脚本是一个能执行的js 脚本, 你可以利用返回结果, 拼装自己需要的脚本!
这里说一下一些问题:
1. 最大的问题, 整个请问只能是异步的, 无法完成同步, 导致会出现一些 parsererror, 如果服务返回时间长, 这个问题就很频繁的, 这个目前无法解决!
经过长时间的测试, 我发现即使出现pasererror 错误触发了error 方法, 但是最终服务返回后, 还是会执行success 方法的, 所以在服务结果满足需求的情况下, 可以把parsererror 错误忽略!
所以error 方法可以处理成
if(status!='parsererror'){ //parsererror 这种错误是因为异步造成的,但是最终还是能success 的,所以忽略次错误!
dosomething
}
2. 也可以自定义jsonpCallback 方法, 把结果返回到一个元素中, 然后用另外的方法定时去访问这个元素, 如果该元素存在数据, 证明访问完成!
但是这样做的问题是, 如果存在服务失败和超时的话, 这些都无法被获取和处理!
3. 还有一种方法是用
setTimeout(function(){
dosomething; //所有后续操作都放到setTimeout 里面, 因为js 是单线程的, 没有sleep 和延迟功能, 最麻烦是没有exit 功能
根据实际情况提交或退回; // 针对我的实际情况是表单提交
}, 2000);
return false; // 针对我的实际情况是表单提交,