Jquery ajax:动态成功函数

时间:2014-03-04 02:56:05

标签: javascript php jquery ajax

您好我正在制作一个可重复使用的javascript / ajax函数,用于验证输入文本框,checkboxes ..等等。但我正在尝试使用ajax创建某种通用验证器。到目前为止,我已经设法通过以下方式使我的 url 数据动态:

<?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变量并将它们传递给javascript,将其用于像这样的ajax:

<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-edtiable扩展。

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

我们使用validate as:

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

}

问题是到目前为止我已经使submitUrl动态化,并且editableType动态。但在验证部分失败了。因为我有一个动态可编辑类型。值可以是日期,文本,数字等。这些有不同的验证规则,如果我需要反击检查数据库中的某些东西,有些可能需要另一个ajax调用。我试图通过将它基于渲染后传递到视图的某个php变量来使验证函数动态化,以查看适当的验证规则。这可能还是我制作科幻小说?非常感谢!

2 个答案:

答案 0 :(得分: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;
          ...
          } ?>
};

答案 1 :(得分: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/