[javascript] Ajax 성공 이벤트가 작동하지 않습니다

등록 양식이 있고 $.ajax제출하는 데 사용 하고 있습니다.

이것은 내 AJAX 요청입니다.

$(document).ready(function() {
    $("form#regist").submit(function() {
        var str = $("#regist").serialize();
        $.ajax({
            type: 'POST',
            url: 'submit1.php',
            data: $("#regist").serialize(),
            dataType: 'json',
            success: function() {
                $("#loading").append("<h2>you are here</h2>");
            }
        });
        return false;
    });
});

내에서 submit1.php의 파일 나는 필드의 존재를 확인 이메일 주소사용자 이름 데이터베이스입니다. 해당 값이 페이지 새로 고침없이 존재하면 오류 메시지를 표시하고 싶습니다 .

AJAX 요청 의 성공 콜백에 이것을 어떻게 추가 할 수 있습니까?



답변

결과는 아마도 JSON 형식이 아니므로 jQuery가 구문 분석하려고하면 실패합니다. error:콜백 함수로 오류를 잡을 수 있습니다 .

어쨌든 해당 기능에 JSON이 필요하지 않으므로 dataType: 'json'행 을 가져올 수도 있습니다 .


답변

문제가 이미 해결되었지만 다른 사람들에게 도움이되기를 바랍니다.

나는 실수를 이런 식으로 직접 사용하려고 시도했다 (성공 : OnSuccess (productID)). 그러나 먼저 익명 함수를 전달해야합니다.

  function callWebService(cartObject) {

    $.ajax({
      type: "POST",
      url: "http://localhost/AspNetWebService.asmx/YourMethodName",
      data: cartObject,
      contentType: "application/x-www-form-urlencoded",
      dataType: "html",
      success: function () {
        OnSuccess(cartObject.productID)
      },
      error: function () {
        OnError(cartObject.productID)
      },
      complete: function () {
        // Handle the complete event
        alert("ajax completed " + cartObject.productID);
      }
    });  // end Ajax        
    return false;
  }

랩퍼로 익명 함수를 사용하지 않으면 웹 서비스가 예외를 리턴하더라도 OnSuccess가 호출됩니다.


답변

dataType 행을 제거하려고 시도했지만 작동하지 않았습니다. 콜백으로 “성공”대신 “완료”를 사용하여 문제를 해결했습니다. 성공 콜백은 여전히 ​​IE에서 실패하지만 스크립트가 실행되고 완료되기 때문에 어쨌든 그게 전부입니다.

$.ajax({
    type: 'POST',
    url: 'somescript.php',
    data: someData,
    complete: function(jqXHR) {
       if(jqXHR.readyState === 4) {
          ... run some code ...
       }
    }
 });

jQuery 1.5에서는 이와 같이 할 수도 있습니다.

var ajax = $.ajax({
    type: 'POST',
    url: 'somescript.php',
    data: 'someData'
});
ajax.complete(function(jqXHR){
    if(jqXHR.readyState === 4) {
        ... run some code ...
    }
});


답변

PHP 파일에서 JSON 형식의 데이터를 생성하기 전에 텍스트 / 데이터를 인쇄 (에코 또는 인쇄)하지 않아야합니다. 그것은 당신이-성공적인 200 OK를 얻었음을 설명 할 수 있지만 당신의 성공 이벤트는 여전히 자바 스크립트에서 실패합니다. POST submit1.php에 대한 firebug의 “Network-Answer”섹션을 확인하여 스크립트가 수신 한 내용을 확인할 수 있습니다.


답변

을 넣어 alert()당신에 success있는지가 전혀 호출되는 것 있도록 콜백.

그렇지 않은 경우 서버에 액세스 할 수 있지만 요청이 전혀 성공하지 못했기 때문입니다. 합리적인 원인은 시간 초과가 만료되거나 PHP 코드의 어떤 예외가 발생하기 때문일 수 있습니다.

파이어 폭스 용 파이어 버그 애드온을 아직 설치하지 않았다면 설치하고 AJAX 콜백을 검사하십시오. 응답 및 성공적인 (200 OK) 응답 수신 여부를 볼 수 있습니다. 콜백 에 다른 것을 넣을 수도 있습니다 alert(). complete콜백은 반드시 호출해야합니다.


답변

나는 같은 문제가 있었다. 데이터를 반환 javascript할 때 json데이터 형식 이 필요하기 때문에 발생 합니다. 그러나 PHP에서 echo 또는 print를 사용하면이 상황이 발생합니다. echo함수 를 사용 php하여 데이터를 반환하는 경우 dataType : "json"작업을 잘 제거하십시오 .


답변

유효한 JSON을 반환하고 “완전한”콜백에서 200의 응답을 얻었고 크롬 네트워크 콘솔에서 볼 수 있었지만 지정하지 않았습니다.

dataType: "json"

일단 “허용 된 답변”과 달리 실제로 문제를 해결했습니다.