Heim > Backend-Entwicklung > PHP-Tutorial > 使用ajax,xhr却没有响应

使用ajax,xhr却没有响应

WBOY
Freigeben: 2016-07-06 13:51:41
Original
1448 Leute haben es durchsucht

1.项目中用到了ajax。结果测试时候发现页面在两款浏览器中表现不一:360浏览器可以顺利实现弹窗(alert)效果,火狐浏览器却一点效果全无。但是他们都有一个共同特点:在浏览器的调试模式(F12)的网络选项xhr下没有得出任何的数据,而在网络的全部、html、css、js这些地方都可以看到有数据,包括index首页(POST),其他资源都是以GET获得。
2.使用了ThinkPHP的自动验证功能,错误会自动返回信息,包括没有输入用户名或没有输入密码,但是我没对账号密码进行比对,也不知道为什么在360浏览器中用户名和密码我随便乱输了数据,结果发现一个空白alert对话框出来,也不知道这是什么回事?
3.360浏览器中alert对话框出现的时候,xhr还是有数据的,但是当alert对话框点击确定后,xhr数据就随之消失。
使用ajax,xhr却没有响应
使用ajax,xhr却没有响应

代码如下:
(1)login.js

<code>//前端登录业务类
var login={
  checkUser:function(){
    //获取登录页面中的输入数据
    var userName=$('input[name="username"]').val();
    var userPass=$('input[name="userpass"]').val();
    //使用ajax
    var url="/stfjzd-15/index.php/Home/Index/checkUser";
    var data={"username":userName,"userpass":userPass};
    $.post(url,data,function(result){
      //$("#result").html(data.info).show();
      //$("#result").fadeOut(4000);
      if(result.status){
        alert(result.info);
      }else{
        //alert(2);
        alert(result.info);
      }
    },"json");
  }
}</code>
Nach dem Login kopieren
Nach dem Login kopieren

(2)IndexController.class.php

<code><?php namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
  public function index(){
    $this->display();
  }
  //用户验证
  public function checkUser(){
    //接收变量,默认htmlspecialchars过滤
    $userName=I("post.username");
    $userPass=I("post.userpass");
    $User=D("Stuser");
    //ThinkPHP的自动验证必须使用create()才能启用
    if(!$User->create()){
      return $this->error($User->getError());
      //exit($User->getError());
    }
  }
  //空操作
  public function _empty(){
    echo "页面不存在,请检查您输入的路径是否正确,我要返回<a href="%22._PHP_FILE_.%22" alt="返回首页" title="返回首页">首页</a>";
  }
}</code>
Nach dem Login kopieren
Nach dem Login kopieren

(3)StuserModel.class.php

<code><?php namespace Home\Model;
  use Think\Model;
  //用户表模型
  class StuserModel extends Model{
    //构造函数创建模型
    public function __construct(){
      $this->DB=M("Stuser");
    }
    //ThinkPHP的表单自动验证
    protected $_validate=array(
      array("username","require","用户名不能为空"),
      array("userpass","require","密码不能为空"),
    );

  }
?></code>
Nach dem Login kopieren
Nach dem Login kopieren

回复内容:

1.项目中用到了ajax。结果测试时候发现页面在两款浏览器中表现不一:360浏览器可以顺利实现弹窗(alert)效果,火狐浏览器却一点效果全无。但是他们都有一个共同特点:在浏览器的调试模式(F12)的网络选项xhr下没有得出任何的数据,而在网络的全部、html、css、js这些地方都可以看到有数据,包括index首页(POST),其他资源都是以GET获得。
2.使用了ThinkPHP的自动验证功能,错误会自动返回信息,包括没有输入用户名或没有输入密码,但是我没对账号密码进行比对,也不知道为什么在360浏览器中用户名和密码我随便乱输了数据,结果发现一个空白alert对话框出来,也不知道这是什么回事?
3.360浏览器中alert对话框出现的时候,xhr还是有数据的,但是当alert对话框点击确定后,xhr数据就随之消失。
使用ajax,xhr却没有响应
使用ajax,xhr却没有响应

代码如下:
(1)login.js

<code>//前端登录业务类
var login={
  checkUser:function(){
    //获取登录页面中的输入数据
    var userName=$('input[name="username"]').val();
    var userPass=$('input[name="userpass"]').val();
    //使用ajax
    var url="/stfjzd-15/index.php/Home/Index/checkUser";
    var data={"username":userName,"userpass":userPass};
    $.post(url,data,function(result){
      //$("#result").html(data.info).show();
      //$("#result").fadeOut(4000);
      if(result.status){
        alert(result.info);
      }else{
        //alert(2);
        alert(result.info);
      }
    },"json");
  }
}</code>
Nach dem Login kopieren
Nach dem Login kopieren

(2)IndexController.class.php

<code><?php namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
  public function index(){
    $this->display();
  }
  //用户验证
  public function checkUser(){
    //接收变量,默认htmlspecialchars过滤
    $userName=I("post.username");
    $userPass=I("post.userpass");
    $User=D("Stuser");
    //ThinkPHP的自动验证必须使用create()才能启用
    if(!$User->create()){
      return $this->error($User->getError());
      //exit($User->getError());
    }
  }
  //空操作
  public function _empty(){
    echo "页面不存在,请检查您输入的路径是否正确,我要返回<a href="%22._PHP_FILE_.%22" alt="返回首页" title="返回首页">首页</a>";
  }
}</code>
Nach dem Login kopieren
Nach dem Login kopieren

(3)StuserModel.class.php

<code><?php namespace Home\Model;
  use Think\Model;
  //用户表模型
  class StuserModel extends Model{
    //构造函数创建模型
    public function __construct(){
      $this->DB=M("Stuser");
    }
    //ThinkPHP的表单自动验证
    protected $_validate=array(
      array("username","require","用户名不能为空"),
      array("userpass","require","密码不能为空"),
    );

  }
?></code>
Nach dem Login kopieren
Nach dem Login kopieren

$this->ajaxReturn()或者json_encode试试

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage