문제

이것이 질문의 제목을 지정하는 올바른 방법인지 확실하지 않습니다.제가 AJAX 호출을 잘못하고 있다는 것을 알고 있습니다...내가 지금 하고 있는 일은 다음과 같습니다. (그런데 저는 ASP.NET MVC 백엔드를 사용하고 있습니다.)

나는 사용한다 jQuery.ajax 일부 데이터를 작업에 게시하면 응답에서 캡처한 보기가 로드됩니다.기본적으로 작업에 일부 데이터를 제공하고 일부 HTML을 다시 가져옵니다.

검증된 Ajax 호출을 생성하고 싶다고 가정해 보겠습니다.오류가 발생한 경우 유효성 검사 메시지를 어떻게 다시 받나요?예를 들어 Ajax 로그인 양식이 있습니다.사용자를 확인할 수 없는 경우 다음과 같이 말씀드리고 싶습니다.단순히 아무것도 하지 않는 대신.

순진한 질문이라 죄송합니다. Google에서 솔루션을 찾기 위해 어떻게 표현해야 할지 모르겠습니다.

미리 감사드립니다!

도움이 되었습니까?

해결책

우선 Ajax 호출을 스크립트에서 사용할 데이터를 반환하려는 경우 (그리고 사용한다면 더 복잡한 것을 의미합니다. 그 데이터를 div), 서버에서 HTML 대신 JSON 데이터를 반환해야 할 것입니다. JSON은 실제로 JS 객체이므로 수신 된 순간 JS에서 사용할 수 있습니다.

따라서 데이터를 반환하면 즉

{id: 1, status: 'ok'}

이와 같은 것을 사용하여 해당 데이터를 사용할 수 있습니다.

$.ajax({
    url: "your/script/url",
    type: "POST",
    data: {login : 'foo', pass: 'bar'}, // whatever the data is
    dataType: "json",
    success: function(data){
        if (data.status === 'ok') {
            console.log('success');
        } else {
            console.log('error');
        }
    }

});

다른 팁

응답하려면 여러 정보를 반환해야 합니다.운 좋게도 JSON을 사용하면 쉽게 이를 수행할 수 있으며, 응답 유형이 json이라고 지정하면 jQuery가 자동으로 이를 처리합니다.Ajax 콜백 함수에 들어가는 객체에는 다양한 속성으로 필요한 모든 데이터 조각이 포함됩니다.

각 Ajax 호출마다 "성공" 또는 "실패" 상태 코드와 그에 따른 오류 모음을 반환하는 습관을 들이는 것이 좋습니다. 이 멋진 블로그 게시물을 참조하세요 무슨 뜻인지 자세히 알아보려면

그 이유는 서버가 실제로 요청을 처리할 수 없고 실패 http 상태 코드를 반환하지 않는 한 ajax 호출은 항상 기본적으로 "성공"하기 때문입니다.요청 결과가 유효성 검사 오류와 비슷하지만 서버가 여전히 일종의 텍스트 응답을 반환하는 경우 애플리케이션 작업이 실패하더라도 ajax 호출은 여전히 ​​성공한 것으로 간주됩니다.

따라서 액션 메소드에서 액션 결과에 html 데이터를 반환하는 대신 다음과 같은 객체를 반환했다면:

public class AjaxResponse
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="AjaxResponse"/> class.
        /// This creates an AjaxResponse that by default indicates SUCCESS.
        /// </summary>
        public AjaxResponse()
        {
            Success = true;
            Data = new List<object>();
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="AjaxResponse"/> class.
        /// This creates an AjaxResponse that indicates FAILURE.
        /// </summary>
        /// <param name="exception">The exception.</param>
        public AjaxResponse(Exception exception)
            : this()
        {
            Success = false;
            Errors = new [] { exception.Message };
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="AjaxResponse"/> class.
        /// This creates an AjaxResponse that indicates SUCCESS.
        /// </summary>
        /// <param name="data">The data.</param>
        public AjaxResponse(object data)
            : this()
        {
            Data = data;
        }

        /// <summary>
        /// Gets or sets a value indicating whether this <see cref="AjaxResponse"/> is success.
        /// </summary>
        /// <value><c>true</c> if success; otherwise, <c>false</c>.</value>
        public bool Success
        {
            get; set;
        }

        /// <summary>
        /// Gets or sets the data.
        /// </summary>
        /// <value>The data.</value>
        public object Data
        {
            get; set;
        }

        /// <summary>
        /// Gets or sets the errors.
        /// </summary>
        /// <value>The errors.</value>
        public string[] Errors
        {
            get; set;
        }
    }

이는 ".Success", ".Data" 및 ".Errors" 속성을 갖는 자바스크립트 개체로 변환됩니다.

따라서 유효성 검사 코드가 모든 유효성 검사 오류로 Errors 배열을 채운 경우 Ajax 콜백 함수가

  1. SUCCESS 속성이 "failure"로 설정되었기 때문에 호출의 의도된 목적이 실패했는지 확인합니다.

  2. 얻다 모두 관련 오류 문자열.

액션 메서드에서 다음과 같은 패턴을 사용하면 쉽게 이 작업을 수행할 수 있습니다.

    try
    {
        instance.Validate();
        return Json(new AjaxResponse(myHtmlData));
    }
    catch(Exception ex)
    {
        var response = new AjaxResponse(ex);

        // Get your validation errors here, put them into
        // your ajax response's Errors property.

        return Json(response);
    }

나는 이 같은 상황에 대해 블로그를 작성했습니다. 어쩌면 그것은 당신의 상황에서도 당신을 도울 것입니다. 기본적으로 사용자 정의 예외 클래스와 오류를 반환 할 예외 동작 속성을 갖는 것입니다. 그래서 당신은 그것을 사용할 수 있습니다 success 그리고 error 옵션의 옵션 $.ajax 전화. 제 생각에는 올바른 방법입니다.

$.ajax 통화는 오류 응답뿐만 아니라 성공을 처리하는 기능을 제공합니다. 클라이언트를 확인 해야하는 오류 플래그 세트로 항상 성공을 반환 할 필요가 없습니다.

당신이 의미하는 바를 완전히 이해했는지 잘 모르겠습니다. 그러나 오류에 대한 검증 메시지의 예는 다음과 같이 작동하지 않습니다.

  1. 사용자가 조치를 취하는 원인이 무엇이든 일부 버튼/링크를 클릭합니다.
  2. Asynchronouse 게시물은 서버로 다시 수행되어 사용자 ID를 전송합니다 (여기에서 보안을 알고 있어야합니다).
  3. 서버에서 필요한 유효성 검사가 완료되고 응답이 다시 전송됩니다 (XML, JSON, 직접 HTML로 인코딩 된 메시지)
  4. 클라이언트 쪽에서 다시 JavaScript 코드에서 응답을 받고 페이지에 적절하게 배치합니다.

도움이되기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top