Ajax响应抛出语法错误:Json @ position 4

时间:2016-12-29 12:55:29

标签: php json ajax yii2 response

在我的Yii2应用程序中,我尝试将bootstrap multiselect下拉值发送到我的控制器,并根据arra在控制器中发送执行操作。它总是遇到错误,我已经警告了thrownError。我得到的错误是 语法错误:意外的令牌<在Json的第4位

我无法理解我哪里出错了。

我的下拉列表代码

 <select id="lstFruit" multiple="multiple" style="width:300px;">
    <optgroup label ="General">
   <?php for ($i = 0; $i<$genCount; $i++){?>

              <option value="<?php echo $genRole[$i] ?>">
                  <?php echo $genRole[$i] ?>
              </option>
          <?php } ?>  
   </optgroup>

   <optgroup label ="Chemicals">
   <?php for ($i = 0; $i<$chemCount; $i++){?>

              <option value="<?php echo $chemRole[$i] ?>">
                  <?php echo $chemRole[$i] ?>
              </option>
          <?php } ?>  
   </optgroup>

    <optgroup label ="Risk Assessment">
   <?php for ($i = 0; $i<$riskCount; $i++){?>

              <option value="<?php echo $riskRole[$i] ?>">
                  <?php echo $riskRole[$i] ?>
              </option>
          <?php } ?>  
   </optgroup>

</select>

我的ajax请求

 jQuery("body").on("click", ".rolesEdit", function() {

        var roles = $("#lstFruit").val();
        alert(roles.length);

        $.ajax({
        type: "POST",
        cache: false,
        data:{roles: roles},
        url: "'.$url.'",
        dataType: "json",
        success: function(data){ 
            if(data.status){
               alert(data);
            }else{
               alert(data);
            }
        },
        error: function (xhr, ajaxOptions, thrownError) {
        alert(thrownError);
                   if(thrownError == "Forbidden"){window.location = "http://test.qsims.com/index.php/product/check-file"; }
        }
    });
});

我的控制器

  if(Yii::$app->request->post('roles')){
           $p = Yii::$app->request->post();
           $roles = $p["roles"];
           $count = count($roles);

           \app\modules\auth\models\SimAuthAssignment::deleteAll(['in','user_id', $id]);

            for($i = 0; $i < $count; $i++){
                $auth = Yii::$app->authManager;         
                $authorRole = $auth->getRole($roles[$i]);
                $auth->assign($authorRole, $model->user_id);
            }
             echo BaseJson::encode([
                'status'=>true,
                'id'=>$model->user_id,                
            ]);

        }             

我哪里错了?任何人都可以帮我这个吗?

1 个答案:

答案 0 :(得分:0)

由于我的网址导致语法错误。我的网址包含回调?=

$url=Yii::$app->getUrlManager()->createUrl("user/update?id=".$id);

这是一个激活JSONP功能的魔术字符串。

我在控制器中创建了一个新操作,并将网址更改为新创建的操作,该操作为我解决了问题。

  $url=Yii::$app->getUrlManager()->createUrl("user/roles-ajax");

回答来自enter link description here - @Abdul

的回复