2015-07-29 22:15:38 9316次浏览 2条回答 0 悬赏 10 金钱

我在youtube上看一个Yii2的课程的时候, 跟视频作者练习使用bootstrap的Modal 模组来加载一个创建内容的表单, 但是通过ajax请求获取html的时候,控制台报错,说

主线程中同步的 XMLHttpRequest 已不推荐使用,因其对终端用户的用户体验存在负面影响。更多帮助请见 http://xhr.spec.whatwg.org/

然后表单里面的各项验证功能都无法正常使用, 这是怎么回事?
如何解决, 请教各位前辈.

  • 回答于 2015-07-30 08:37 举报

    是浏览器主线程同步处理ajax请求的做法的提示,看起来是早期的js的方法,现在已废弃。改成异步应该就可以,百度一下有很多文章。推荐使用jquery的post方法请求modal需要的数据,然后在异步回调函数中更新modal数据再弹出modal。

    前端jquery代码参考:

    function releasePlaylist(id,name){
    	console.log('realeasePlaylist - id:'+id+', name:'+name);
    	// 在模态框中填入当前playlist id
    	$('#modalLabel-release').attr('playlistid', id);
    
    	// ajax取出广告机组选择内容
    	if (!has_release_playlist_model_body){
    		$.post("/advertise/schedule/get-group-list",
    			{
    			},
    			function (data,status) {
    				//console.log(data);
    				var ret = eval('(' + data + ')');
    				if (ret['result'] == 'OK') {
    					$('#release-body').html(ret['group-list']);
    					has_release_playlist_model_body= true;
    				}
    			}
    		);
    	}
    
    	$('#playlist-name-tip').html(name);
    	//弹出模态框
    	$('#release-playlist-modal').modal({keyboard: false});
    }
    

    后端代码供参考:

    public function actionGetGroupList()
    {
    	$boxGroups = BoxGroup::find()->where(['user_id'=>yii::$app->user->identity->username])->asArray()->all();
    	$renderResult=  $this->renderPartial('_grouplist', [
    		'boxGroups' => $boxGroups,
    		'boxesInGroup' => [],
    	]);
    	return json_encode(['result'=>'OK','group-list'=>$renderResult]);
    }
    

    其中renderPartial调用的view,可以是比较复杂的页面,可以带js等等。

    5 条回复
    回复于 2015-07-30 09:21 回复

    renderPartial得到的带js的页面他里面加载的js会起作用吗?为何我得到的表单,里面的验证都不能正常工作了?

    回复于 2015-07-30 11:15 回复


    嗯,一个页面可以有多个<script>标签的,renderPartial里面带的js也会起作用。类似

    $('#xxx').on('click',function(){});
    

    这样的代码,如果id="xxx"代表的html元素重新更新过,则需要重新执行一下这行代码。

    亲测验证过,放心使用。

    回复于 2015-07-30 22:13 回复

    但是我的验证js文件好像是通过ajax 获取的页面加载进来的, 这样也有用?

    回复于 2015-07-31 07:57 回复

    我是直接在ajax返回的内容中写<script>......</script>,你是用viewregisterJs或者registerJsFile加载的吗?理论上也应该OK的。

    回复于 2015-08-03 13:43 回复

    我只是调用了另外一个创建表单的 _form.php

    觉得很赞
  • 回答于 2015-07-30 11:14 举报

    嗯,一个页面可以有多个<script>标签的,renderPartial里面带的js也会起作用。类似$('#xxx').on('click',function(){});这样的代码,如果id="xxx"代表的html元素重新更新过,则需要重新执行一下这行代码。

    亲测验证过,放心使用。

您需要登录后才可以回答。登录 | 立即注册
猫学乖
主管

猫学乖

注册时间:2015-06-26
最后登录:2016-06-14
在线时长:9小时44分
  • 粉丝3
  • 金钱223
  • 威望20
  • 积分513

热门问题