2014-03-04 2 views
0

안녕하세요, 저는 재사용 가능한 javascript/ajax 함수를 입력 텍스트 상자, 체크 박스 등의 유효성 검사에 사용하고 있습니다. 하지만 아약스를 사용하여 일종의 일반 유효성 검사기를 만들려고합니다.Jquery ajax : dynamic success function

<?php 
    //contains php variables passed during after rendering the view 
    $url = //...some url; 
    $data = // array()... some array containing parameters; 
    $success = // should contain a string defining a function; 
?> 

그래서 내가 필요한 얻을 PHP 변수와 같은 아약스에 사용하기 위해, 자바 스크립트에 전달할 : 지금까지 나는이를함으로써 내 URL데이터 동적으로 만들 관리했습니다 :

<script> 
$(document).ready(function(){ 
    var submitUrl = '<?php echo Yii::app()->createAbsoluteUrl($url); ?>'; 
    var params = <?php echo json_encode($data); ?>; 

    $.ajax({ 
     url : submitUrl, 
     type : 'POST', 
     async : false, 
     data : params, 
     success : ??? // i don't know how to define this function dynamically based on php values 

    }); 


}); 
</script> 

나는 성공 함수를 동적으로 정의하는 방법을 모른다. 나는 정의를 시도했다 :

var successFunction = <?php echo json_encode("function(response){ return 'sample response' ; }");?>; 

운 없음. 어떻게 성공 함수를 정의하는 문자열에서 동적으로 성공 함수를 넣을 수 있습니까? 많은 감사합니다!

--------------------------------- 추가 ------------ -------------------------------

실제로 저는 X- 편집 가능한 확장 기능을 사용하고 있습니다. 문제는 지금까지 동적 나는 submitUrl 동적했습니다이며, editableType

validate : function(value){ 
//do some validation rules like if value < someValue or is a negative, or character 

} 

:

$('.editable').editable({ 
     type : editableType, 
     savenochange : true, 
     pk : 1, 
     emptytext: 'Click to edit', 
     params : function(){ 
      return jsParameters; 
     }, 
     url : submitUrl, 
     validate : validateFunction, 
}); 

우리는 다음과 같이 검증 사용합니다. 검증 부분에서는 실패했습니다. 동적 인 편집 가능한 유형이 있기 때문입니다. 값은 날짜, 텍스트, 숫자 등일 수 있습니다. 그리고 이것들은 다른 검증 규칙을 가지고 있습니다. 데이터베이스에서 무언가를 체크 할 필요가 있다면 또 다른 아약스 호출이 필요할 수도 있습니다. 렌더링 후보기에 전달 된 일부 PHP 변수를 기반으로 유효성 검사 함수를 동적으로 만들고 어떤 유효성 검사 규칙이 적절한 지 확인하려고했습니다. 이게 가능합니까? 아니면 공상 과학 영화를 만들고 있습니까? 많은 감사!

+0

이 http://jqueryvalidation.org/ 같은 검증 플러그인을 사용하여 수행하는 것이 더 쉬울 수 있지 않을까요? – Barmar

답변

1

기능에 대한 JSON 인코딩이 없습니다. 함수 본문 내의 데이터에 사용하십시오.

var successFunction = function(response) { 
    <?php switch($editableType) { 
      case 'date': 
       echo 'return response.test(dateRegexp);'; 
       break; 
      case 'number': 
       echo 'return response.test(numberRegexp);' 
       break; 
      ... 
      } ?> 
}; 
+0

만약 그것이 단지 응답이 아니라면? 성공 함수 내에서 뭔가 다른 것을하고 싶다면 어떻게해야할까요? – muffin

+0

성취하려는 것을 보여 주면 도움이 될 것입니다.이 모든 잘못을 범할 수도 있습니다. – Barmar

+0

게시물을 편집했습니다. – muffin

1

dataType : 'script;를 사용할 수 있습니다.

<script> 
    $(document).ready(function(){ 

    var submitUrl = '<?php echo Yii::app()->createAbsoluteUrl($url); ?>'; 
    var params = <?php echo json_encode($data); ?>; 

    $.ajax({ 
     url : submitUrl, 
     type : 'POST', 
     async : false, 
     data : params, 
     dataType: 'script' 

    }); 


}); 
</script> 

https://api.jquery.com/jQuery.ajax/