您好我正在制作一个可重复使用的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变量来使验证函数动态化,以查看适当的验证规则。这可能还是我制作科幻小说?非常感谢!
答案 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>