2011-12-06 9 views
3

현재 jQuery 및 html 양식을 많이 사용하는 MVC 응용 프로그램에서 작업 중입니다. 그러나 최근에 나는 이것들이 서로 모순되는 것처럼 보였습니다 ...

예를 들어, 양식 기본 제출이 내 AJAX 호출을 처리하지 못하게해야합니다. 그렇지 않으면 서버가 두 번 호출되어 질문을하게됩니다. AJAX를 사용하여 양식을 제출하는 아이디어. 대신 $.ajax 전화를 에 <input type="submit" />으로 연결하는 것이 더 낫지 않습니까?

아약스를 통해 제출 된 양식을 작성하는 것이 모순되는가요?

+0

"모순"이란 무엇을 의미합니까? 모순 된 느낌은 무엇입니까? –

+0

ajax 호출을하기 전에 기본값을 방지하지 않으면 제출 프로세스와 Ajax 프로세스를 통한 양식 제출이 서로 모순되는 것을 느꼈습니다. – shuniar

+0

클라이언트가 AJAX를 지원한다면 감사 메시지를 표시하거나 무언가 상태를 확인하기 위해 전체 페이지를 새로 가져 오기 위해 서버로 왕복해야합니다. 나 자신은 AJAX를 사용하여 데이터를 제출하고 내 용도에 따라 HTML 또는 JSON을 반품 할 것이다. 양식 제출시 기본 설정을 사용하지 않으면 중복 제출이 이루어집니다. 아이디어는 정상적으로 저하되도록 코딩하는 것입니다. 양식 제출에 바인딩하여 AJAX가 활성화되어 있는지 확인하고 preventDefault인지 확인한 다음 AJAX를 수행 할 수 있습니다. –

답변

4

제출 단추에 ajax 호출을하는 이유는 사용자가 javascript를 사용할 수 없도록 설정하면 자연스러운 대체 수단입니다. 요청이 ajax 요청이거나 그냥 곧바로 전송되는 경우 백엔드 로직을 감지하고 ajax 인 경우 데이터를 다시 보내거나 그렇지 않은 경우 요청을 'old school'방식으로 처리 할 수 ​​있어야합니다.

편집 : 컨텍스트의 경우. 사용자가 양식 그냥 정상처럼 /processForm.php에 제출, 자바 스크립트를 사용하지 않는 경우에

<form action="/processForm.php" method="POST"> 
    <input type="submit" value="submit" /> 
</form> 

그런 다음 jQuery를이

$('form').bind('submit', function(e){ 
    e.preventDefault(); 
    //do your stuff 
}); 

처럼 보일 수 있습니다.

양식이 ajax를 통해 전송되었는지, 다음 php로 전송되었는지는 감지 할 수 있습니다 (사용 중인지는 모르겠지만 그게 내가 가진 것입니다).

if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { 
    /* handle ajax here */ 
}else{ 
    /* handle normal submit here */ 
} 
+0

자연스러운 대체물로 구현하는 방법은 무엇입니까? 현재는 액션을 막아서 ajax가 우선 순위를 갖도록하여 폴백을 의미하지 않습니다. 예제를 제공 할 수 있습니까? – shuniar

+1

사용자가 JavaScript를 활성화하지 않은 경우 표준 양식 제출을 방해하는 JS가 실행되지 않습니다. 그래서 당신은 정말로 아무것도 할 필요가 없습니다. – maxedison

+0

AJAX가 활성화되어 있는지 감지하려면 : $ .support.ajax이고 전체 예제는 $ ('# categoryFilter')입니다 .. submit (function (event) {if ($. support.ajax) {event.preventDefault();/* 여기에 내 AJAX 넣기 * /}}); –

1

나는 그것이 "모순되는"것이라고 말하지 않을 것이다. ajax를 통해 양식을 제출할 때 반드시 <form> 요소를 사용할 필요는 없지만 시맨틱 용도로 사용할 수도 있습니다.

그리고 예, type="submit" 대신 <input type="button" />을 사용하고 싶으므로 기본 양식 제출을 방지해야합니다.

0

저는 그렇게 생각하지 않습니다.

사용자가 자바 스크립트를 사용하지 않도록 설정하여 양식을 서버에 제출하고 사용자가 귀하의 웹 페이지를 계속 사용할 수있을 때 폴백을 사용할 수 있습니다.

백엔드가 아약스 호출인지 알고 있어야합니다. jQuery를 사용하고있는 것으로 보이고, jQuery ajax가 x_request_with: xmlhttprequest 헤더를 보내고 백엔드에서 PHP를 사용하는 경우 $_SERVER['http_x_request_with']으로 캡처 할 수 있습니다.

0

당신의 행동에 따라 다릅니다. 일반적으로 나는 사용하려고 노력하고 $ .ajax() 호출 ...하지만 언젠가는 asp.net mvc 함께 작동하지 않습니다. 예를 들어 파일을 업로드하는 경우 asp.net 유효성 검사가 중단됩니다. 이 문제를 해결하기 위해 ajaxForm 플러그인을 사용하여 표준 양식을 래핑합니다.

관련 문제