2014-01-24 3 views
1

저는 MVC에 처음 접했지만 내 연구에서는 양식을 통해 내 컨트롤러에 요청을 보내거나 jQuery 및 Ajax 요청을 사용할 수 있다고 지적했습니다.Ajax가 정상적인 MVC를 요청합니다

Ajax를 항상 사용하는 것이 좋으므로 내가 원하지 않을 때 페이지를 다시로드하지 않도록하고 아이콘로드를 허용 하시겠습니까?

컨트롤러로 데이터를 보내는 두 가지 방법을 혼합해야합니까? 양식을 사용하는 것이 더 쉽습니다. Ajax에서 모델 속성을 수동으로 커피해야 할 필요가 있기 때문에 더 유연 할 것입니다.

이 패턴 (주로 Ajax 요청 사용)이 좋은 아이디어인지 궁금합니다.

답변

2

나는 주로 환경 설정 문제라고 생각하지만 jQuery와 함께 AJAX를 사용하면보다 유연하고 응답 성이 뛰어난 응용 프로그램이 제공된다고 생각합니다. 또한 더 이상 일할 필요가 없습니다. 당신이 뭔가를 할 필요가 단지 것 컨트롤러 형태로 한 모델의 모든 속성을 제출하려면 :

$.ajax({ 
    url: "SomeController/SomeMethod", 
    data: $('#FormName').serialize(), //this will basically do what MVC would have done if you used forms and a submit button 
}); 

그리고 모델 바인더가 다시 모델까지 당신의 모든 속성을 바인딩 컨트롤러

.

그래서 당신은 할 것이다 :

public ActionResult SomeMethod(SomeModel someModel) 
{ 
    // do work with your tightly bound model! 
    return View(); 
} 

하지만를 ... 그냥 AJAX의 장점과 당신이 여기 후 발생합니다 단점 중 일부는 당신이 알고 싶다면 :

PRO :

대부분의 경우 웹 사이트의 관련 페이지는 많은 공통된 콘텐츠로 구성됩니다. 전통적인 방법을 사용하면 모든 요청에 ​​해당 내용을 다시로드해야합니다. 그러나 웹 애플리케이션은 Ajax를 사용하여 업데이트해야하는 컨텐츠 만 요청할 수 있으므로 대역폭 사용 및로드 시간이 크게 감소합니다.

비동기 요청을 사용하면 클라이언트의 웹 브라우저 UI가 대화식으로 처리되고 입력에 신속하게 응답 할 수 있으며 페이지 섹션도 개별적으로 다시로드 할 수 있습니다. 응용 프로그램이 서버 측에서 변경되지 않은 경우에도 사용자는 응용 프로그램이 더 빠르거나 반응이 좋을 것으로 인식 할 수 있습니다.

스크립트 및 스타일 시트는 한 번만 요청하면되므로 Ajax를 사용하면 서버 연결이 줄어들 수 있습니다.

웹 사이트 전체에서 상태를 유지 관리 할 수 ​​있습니다. 주 컨테이너 페이지를 다시로드 할 필요가 없으므로 JavaScript 변수가 지속됩니다.

CON :

는 동적 인 특성으로 인해, 아약스 인터페이스는 정적 페이지에 비해 개발 종종 어렵습니다.

연속적인 Ajax 요청을 사용하여 동적으로 생성 된 페이지는 브라우저의 히스토리 엔진에 자동으로 등록되지 않으므로 브라우저의 "뒤로"버튼을 클릭하면 사용자가 Ajax 사용 가능 페이지의 이전 상태로 돌아 가지 않을 수도 있지만 반환 될 수 있습니다 그 전에 방문한 마지막 전체 페이지로 이동합니다. 해결 방법은 보이지 않는 IFrame을 사용하여 브라우저 기록 변경을 트리거하고 Ajax가 실행될 때 URL의 앵커 부분 (# 다음에 오는)을 변경하고 변경 사항을 모니터링하는 것입니다.

동적 웹 페이지 업데이트로 인해 사용자가 응용 프로그램의 특정 상태를 책갈피에 추가하기가 어려워집니다. 이 문제에 대한 해결책이 존재하며, 그 중 다수는 URL 조각 식별자 ('#'다음에 나오는 URL 부분)를 사용하여 주어진 상태에서 응용 프로그램을 추적하고 사용자가 돌아올 수있게합니다.

대부분의 웹 크롤러는 JavaScript 코드를 실행하지 않으므로 검색 엔진이 색인을 생성 할 수 있도록 공개 색인 웹 응용 프로그램은 일반적으로 Ajax로 검색되는 콘텐츠에 액세스하는 대체 수단을 제공해야합니다.

브라우저가 JavaScript 또는 XMLHttpRequest를 지원하지 않거나이 기능이 비활성화 된 사용자는 Ajax를 사용하는 페이지를 올바르게 사용할 수 없습니다. 마찬가지로 휴대 전화, PDA 및 스크린 리더와 같은 장치는 필요한 기술을 지원하지 않을 수 있습니다. Ajax를 사용할 수있는 스크린 리더는 여전히 동적으로 생성 된 컨텐츠를 제대로 읽을 수 없습니다. 사용자가 기능을 수행 할 수있게하는 유일한 방법은 비 JavaScript 메서드로 대체하는 것입니다. 이는 링크와 양식을 올바르게 해석하고 Ajax에만 의존하지 않도록함으로써 가능합니다. JavaScript에서는 양식 제출이 "return false"로 중단 될 수 있습니다.

W3C에이 기능을 사용할 수있는 XMLHttpRequest 객체의 초안이 있지만 동일한 오리진 정책은 일부 Ajax 기술이 도메인에서 사용되는 것을 방지합니다.

다른 웹 기술과 마찬가지로 Ajax에는 개발자가 해결해야하는 고유 한 취약점 집합이 있습니다. 다른 웹 기술에 익숙한 개발자는 안전한 Ajax 응용 프로그램을 작성하기 위해 새로운 테스트 및 코딩 방법을 배워야 할 수도 있습니다.

Ajax 기반 인터페이스는 웹 서버와 백엔드 (데이터베이스 또는 기타)에 대한 사용자 생성 요청 수를 크게 늘릴 수 있습니다. 이로 인해 응답 시간이 길어지고 하드웨어가 추가로 필요할 수 있습니다.

what are the advantages and disadvantages of making ajax calls using jquery?

1

방법은 단일 페이지 응용 프로그램 (SPA)입니다. AngularJS (MVW 패턴), 백본 (MVC 패턴), KnockoutJS (MVVM 패턴)와 같은 자바 스크립트 데이터 프레임 워크를 사용하는 것이 좋습니다.

자바 스크립트 데이터 레이어에서 모델을 복제 할 필요는 없습니다. 느슨한 것은 MVC.net 뷰 템플릿 생각입니다.

둘 다 혼합 할 수 있지만 양면 단점이 있습니다. 여기

KnockoutJS로 만든 공식 마이크로 소프트 SPA 데모 :

http://www.asp.net/single-page-application/overview/introduction/knockoutjs-template

내가 (인증 제외) AJAX의 모든과 함께 순간에 SPA 일하고는 IMO가 UX에 새로운 큰 차원을 제공합니다 .

0

그것은 매우 일반적인 관행이고 나는 마이크로 소프트가 webapi를 도입하는 이유 중 하나라고 생각, 그래서 당신이 정말로 자신의 MVC를 사용하지 않지만 모두가 엠버와 같은 프레임 워크 아약스 호출에 의존, 또는 다른 JS/각도 js.

아약스 설치/코드 작성에 더 많은 시간이 걸리지 만 사용자가 보는 것보다 더 빨리 수행됩니다.

관련 문제