한 번 기록 하고 SetInternal 과 SetTimeout 다시 배우 기
$.ajax({
url: "http://localhost:1066/handle/r.ashx?method=updateChaoXingSchool",
type: "get",
dataType:"jsonp", // jsonp
jsonp:"jsonpCallback",
jsonpCallback:"success_jsonpCallback",
data: {schoolId:id,name:name,letter:lt},
success:function(result){
csl++;
},
error:function(data){
}
});
백 엔 드 context.response.write 도 jsonpCallback 에서 만 든 방법 명 과 일치 해 야 합 니 다.그 내용 은 중요 하지 않 습 니 다.context.Response.Write("success"jsonpCallback({\"result\":true})");사고방식 1:$.each 플러그 인 순환 을 사용 하여 하지만$.each 는 비동기 이 고 JSONP 도 비동기 이 며 동기 화로 강제로 설정 할 수 없습니다.동기 화 할 수 있어 도 웹 페이지 를 막 아서 클릭 이벤트 가 효력 을 상실 합 니 다.이렇게 하면 도시 와 알파벳 을 바 꿀 수 없습니다.사고 2:for 순환+sitetimeout 을 사용 합 니 다.for 순환 은 동기 화 방법 이기 때문에 settimeout 은$.ajax 의 운행 간격 을 제어 할 수 있 습 니 다.사용 해 봐 야 setTimeout 이 비동기 적 인 방법 이라는 것 을 깊이 이해 할 수 있 습 니 다.여러 가지 방식 으로 setTimeout(예 를 들 어 i*1000)을 설정 하 는 것 도 효과 가 매우 좋 지 않 습 니 다.순서 와 내용 을 수집 하 더 라 도 브 라 우 저 카드 가 무 너 질 수 있 습 니 다.사고 3:앞의 시 도 는 저 로 하여 금 순환 을 사용 하여 실현 하 는 것 을 완전히 포기 하 게 했 습 니 다.타이머 SetInternal 을 사용 하여 실현 하 는 것 을 바 꾸 었 습 니 다.전체 웹 페이지 의 상황 을 정기 적 으로 감시 하고 채집 을 어떻게 수행 하 는 지 판단 합 니 다.원리: 1.시작 단 추 를 누 르 면 도시 대상 집합,현재 학교 대상 집합 가 져 오기;시작 도시,알파벳,학교의 Inex 값 과 같은 초기 값 을 설정 합 니 다. 2.타이머 A 설정,0.1 초 마다 현재 페이지 를 수집 하 는 학교,현재 학교 Index 자체 증가 3.if(현재 학교 인덱스==현재 페이지 총 학교 수) then 타이머 A 를 제거 하고 알파벳 을 전환 하 는 과정 에서 계속 채집 하지 않도록 합 니 다. 누 르 면 다음 알파벳 전환 else 학교 데이터 수집... 4.타이머 B5,if 설정(현재 알파벳 인덱스==26) then 타이머 B 를 제거 하여 도 시 를 전환 하 는 과정 에서 계속 채집 하지 않도록 합 니 다. 클릭 하여 다음 도시 로 전환 else 학교 데이터 수집... 최종 코드:
// ==UserScript==
// @name
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author You
// @match http://passport2.chaoxing.com/*
// @require http://code.jquery.com/jquery-1.10.0.min.js
// @grant none
// ==/UserScript==
//
var cl=$(".zw_s_li a").length;
var ll=26;
var sl=$(".zw_m_li a").length;
//
var ccl=0;
var cll=1;
var csl=0;
//
var city=$(".zw_s_li a");
var school=$(".zw_m_li a");
var letter=$(".zw_m_t_li a");
var timerA;
var timerB;
function getSchool(){
if(cll>ll){
clearInterval(timerB);
// ,
ccl++;
cll=1;//
$(city[ccl]).click();
setTimeout(function(){
$(letter[1]).click();
timerB=setInterval(function(){
getSchool();
},1000);
},2000);
}
else if(ccl>cl){
clearInterval(timerB);
return;
}
else if(csl==sl){
// ,
clearInterval(timerB);
cll++;
console.log($(letter[cll]).attr("id"));
$(letter[cll]).click();
setTimeout(function(){
school=$(".zw_m_li a");
csl=0;
sl=school.length;
timerB=setInterval(function(){
getSchool();
},1000);
},2000);
}
else{
//
console.log(ccl+"_"+cll+"/"+ll+"_"+csl+"/"+sl);
var id=$(school[csl]).attr("id");
var name=$(school[csl]).attr("name");
var lt=$(letter[cll]).attr("id");
csl++;
insertSchool(id,name,lt);
getSchool();
}
}
function insertSchool(id,name,lt){
$.ajax({
url: "http://localhost:1066/handle/r.ashx?method=updateChaoXingSchool",
type: "get",
dataType:"jsonp",
jsonp:"jsonpCallback",
jsonpCallback:"success_jsonpCallback",
data: {schoolId:id,name:name,letter:lt},
success:function(result){
},
error:function(data){
}
});
}
(function() {
$(".zw_m_box").before("");
$("#caiji").click(function(){
cl=$(".zw_s_li a").length;
sl=$(".zw_m_li a").length;
city=$(".zw_s_li a");
school=$(".zw_m_li a");
letter=$(".zw_m_t_li a");
getSchool();
});
})();
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.