먼저 JQuery의 Ajax 호출 프로세스를 설명하기 위해 예제를 사용합니다.
구현된 기능 중 하나는 결제 확인 버튼을 클릭한 후 잔액 결제 기능이 구현되는 것입니다.
1. 먼저 호출해야 하는 관련 기능을 PHP 페이지의 버튼에 바인딩합니다.
$(함수(){
$("#pay_btn").bind("click",ABC.balancePay);
});
2. 대본실:
$.post 방법을 사용하는 경우:
BalancePay: 기능(이벤트){
event.preventDefault();
var tthis = $(event.currentTarget);
var form = tthis.parents('form');
var url = form.attr('action');
var data = 'code=15′ ;// $('#verifyCode').val();
var jqXhr = $.post(url, 데이터, 정의되지 않음, 'jsonp');
jqXhr.done(함수(데이터){
//console.log('콘솔을 통해 인쇄됩니다.') //#4
$("#msg").text('결과:' 데이터);
});
}
$.post 메소드는 콜백 함수를 직접 지정할 수도 있습니다:
$("#msg").text('결과:' 데이터);
}, 'jsonp');
$.ajax 방법을 사용하여 다음을 달성합니다.
$("#msg").text('결과:' 데이터);
}, 'jsonp');
$.ajax 방법을 사용하여 다음을 달성합니다.
유형: '게시물',
url: url,
데이터: {코드: '15′},
데이터 유형: 'jsonp',
sccuess:함수(데이터){
경고('좋음');},
error: function(XMLHttpRequest, textStatus, errorThrown) { // #3 이 오류 함수는 디버깅에 매우 유용합니다. 구문 분석이 잘못된 경우 오류 상자가 나타납니다(XMLHttpRequest.readyState);
;
});
3. 서버측:
코드 복사
{
//header("content-type: text/javascript");
//header(‘Content-type: text/html; charset=utf-8′);
$code = $_POST['code'];
//$code //#1 此处给出一个有语法错误的表达式
//echo $code; //#2 此处标记,用于后面调试说明;
…
$result = 1;
//echo $_POST['callback']. ‘(‘ . json_encode($result) . ‘);';//注意使用的编码方式需要和客户端请求保持一致;
exit(0);
}
Firefox有强大FireBug 插件,现在比较新的浏览器如 Chrome 和 Safari,以及 IE 8都内置了调试工具,借助于这些调试工具,可以非常详细的查看 Ajax 的执行过程(chrome和firefox中调出调试工具的快捷键是ctrl+shift+c);
以下使用FireBug;
1.使用firebug,查看回调:
对于Ajax方法,是通过异步执行的服务器端程序,如果服务器端出错,在页面上不会显示的,我们需要借助调试工具来查看;例如,将以上示例中#2的注释去掉,触发ajax请求一次,可以在控制台面板中查看到错误的返回结果:
서버측 프로그램에 오류가 있으면 직접 확인할 수도 있습니다. 오류의 원인은 일반 페이지와 동일하지만 단지 ajax가 반환한 패널에서만 볼 수 있습니다(아무것도 없습니다.) 웹 브라우저 페이지에 표시됩니다).
여기서 확인해야 할 변수를 인쇄하기 위해 서버 측에서 echo 및 기타 메소드를 사용하는 경우 콜백 함수의 이름이 변경되었기 때문에 Ajax 호출의 결과가 실패해야 한다는 점에 유의해야 합니다. 변경되었습니다.
예를 들어 인쇄된 변수가 333인 경우 최종 콜백 결과는 333ajaxcallbak(1)입니다. 클라이언트가 함수 이름 333ajaxcallbak를 찾고 있으며 이를 구문 분석할 수 없습니다.
2. 오류 기능을 사용하여 오류 정보를 인쇄합니다.
$.ajax()에는 함수를 지정할 수 있는 오류 매개변수가 있습니다. 이 메소드는 요청이 실패할 때 호출됩니다. 여기에 제공된 정보는 디버깅에 매우 유용합니다.
오류: 함수(XMLHttpRequest, textStatus, errorThrown)
오류 이벤트에서 반환된 첫 번째 매개변수 XMLHttpRequest에는 몇 가지 유용한 정보가 있습니다.
XMLHttpRequest.readyState:
반환된 상태 코드는 오류 설명에 해당합니다:
상태 코드
0 - (초기화되지 않음) send() 메서드가 아직 호출되지 않았습니다.
1 - (로드 중) send() 메소드가 호출되었으며 요청이 전송되고 있습니다
2 - (로딩 완료) send() 메소드가 실행되어 모든 응답 내용을 수신했습니다
3 - (대화형) 응답 콘텐츠 구문 분석
4 - (완료) 응답 내용 구문 분석이 완료되었으며 클라이언트에서 호출할 수 있습니다
XMLHttpRequest.status:
여기에 반환된 상태 코드는 404와 같이 우리가 매일 보는 HTTP 상태입니다. 이는 페이지를 찾을 수 없음을 의미합니다.
텍스트상태:
"시간 초과", "오류", "수정되지 않음" 및 "파서 오류".
(기본값: 자동 판단(xml 또는 html)) 요청 실패 시 호출할 시간입니다. 세 가지 매개변수가 있습니다: XMLHttpRequest 객체, 오류 메시지 및 (선택 사항) 캡처된 오류 객체. 오류가 발생하면 오류 메시지(두 번째 매개변수)에는 null 외에 "timeout", "error", "notmodified" 및 "parsererror"가 포함될 수 있습니다.
이 오류 기능을 통해 프로그램 오류를 쉽게 해결할 수 있습니다.
예를 들어 위의 #2에서 주석을 제거하는 것은 오류가 있는 콜백 함수 이름을 변경하는 것과 동일하며 다음과 같이 보고됩니다.
3. console.log를 사용하여 출력을 인쇄합니다. (alert()도 사용할 수 있습니다)
이는 디버깅 경험을 향상시키기 위한 보조 방법일 뿐입니다. js에서 관심 있는 변수를 추적하려면 Alert() 메소드를 통해 출력하면 되지만, 팝업창이 자주 뜨면 짜증이 납니다. console.log는 대안이며, Firebug 플러그인의 방법입니다. console.log에 의해 인쇄된 변수 결과는 Firebug 콘솔 패널에 표시됩니다.
오류의 가능한 원인:
1. 반환된 결과의 형식이 올바르지 않은 경우, Firebug에서 결과를 볼 수 있습니다.
2. JSON 요청의 경우 형식이 엄격합니다.
오류 함수를 통해 보고된 오류가 다음과 같은 경우:parsererror
가능한 이유는 서버측 스크립트 인코딩 문제입니다. 서버측 처리 기능에서 처리되는 첫 번째 줄에 해당 헤더 정보를 추가할 수 있습니다.
예: header('콘텐츠 유형: 텍스트/html; charset=utf-8');
물론 형식이 잘못되었을 가능성이 높습니다.
이상한 json 형식 문자열을 출력하지 마세요. 그렇지 않으면 jq1.4 버전은 성공 콜백을 실행하지 않습니다. 예를 들어, {abc:1} 또는 {'abc':1},
{'success':true}가 {"success":true}로 변경되었습니다.