我做了一个页面index.php包含三个框架top、left、right,框架中包含top.php,left.php,right.php,然后我想在框架里面加上更换主题的功能,于是在top.php中加入两个按钮,一个id为red,一个id为blue,那么针对两个主题我做了两个对应的样式文件,red.css和blue.css.我想的效果是当点击red的时候,top.php,left.php,right.php的样式统一调用red.css文件,当点击blue时,统一调用blue.css文件。这样也就实现了主题的更换,我将css的路径存到数据库表里,表名称为tb_css,新增一条数据id=1,name=css,address=css/style.css,我想通过动态的更新和调用该条数据的address来达到同一时间更换所有页面的样式这样的目的:
<link href="<?php echo $info['address']?>" rel="stylesheet" type="text/css"  />($info['address']是从数据库中查询的address的数据,数据库查询语句省略)。top.php,left.php,right.php三个页面的头部统一都用了这句话,然后因为要达到同一时间加载新的样式且不能跳转页面,我想到了ajax来处理,问题就出在这里。$("#red").click(function(){

top.php的ajax语句:
$.ajax({ 
    type: "POST", 
url: "chuli.php",
data: {
css:"css/style2.css",
},
dataType: "json",
success: function(data){
if(data.success){
alert("你的主题已经变成蓝色!请刷新,路径为"+data.css);
}
},
error: function(jqXHR){     
   alert("发生错误:" + jqXHR.status);  
},     
});
});top.php的按钮:
        <ul>
<li><a href="" id="blue">蓝色</a></li>
</ul>chuli.php通过接收ajax传过来的css地址更新数据库并返回一个json格式的数据:
$cssad = $_POST['css'];
$link = mysql_connect('localhost','root','');
mysql_select_db('db_blog',$link);
mysql_query("update tb_css set address='$cssad' where id=1",$link);
$result=array("success"=>true,"css"=>$cssad);
echo  json_encode($result);
此时样式改变了,数据库里css的路径也变了,但是服务器没有success和css的返回值,页面弹出“发生错误:0”;当我把数据库更新语句干掉,此时服务器才有success和css的返回值,页面弹出:“你的主题已经变成蓝色!请刷新,路径为css/style2.css。显然在ajax的处理页面不能有数据库的操作,一旦有,即使达到了操作的目的,返回值也将失去了,这是为什么呢?还有我如何才能让ajax或者利用其它方式达到既返回值又在同一时间把数据库进行更新而不跳转页面呢?

解决方案 »

  1.   

    $("#red").click(function(){   这里写错了是  $("#blue").click(function(){,这个无关紧要,这是我复制错了,因为我的源代码写的是变red主题,这里我改成变blue主题了,忘记把这里改过来。不影响我的问题
      

  2.   

    显然是 chuli.php 出现了错误
    你可写一个表单提交的 chuli.php,就可观察到错误是什么了
      

  3.   

    或者
    注释掉 dataType: "json",
    在 success: function(data){ 里 alert(data);
    也可以看到错误信息
      

  4.   

    按照你这么做了,还是弹出“发生错误:0”,你的意思是在ajax的处理页面是可以有数据库操作的,是我的语法写错了吗?
      

  5.   

    error时,有以下三个参数:XMLHttpRequest 对象、错误信息、(可选)捕获的异常对象,function (XMLHttpRequest, textStatus, errorThrown),在error时把他们都alert一下看看是什么情况
      

  6.   

    我把增删改查的四个语句都试了,全部都是这个效果,只要是在ajax的处理页面写数据库操作效果都是这样,所以应该不是语法写的有问题,我只有把数据库操作的语句注释掉,服务器才会返回值。我想知道是否ajax的处理页面是允许对数据库进行操作的?
      

  7.   


    你返回 的 数据 有问题 ,不是纯粹的json,不信你在回调 函数error 里
    alert(JSON.stringify(jqXHR));
      

  8.   

    chuli.php有问题,或返回的不是json格式。
    直接把数据post到chuli.php看看返回什么,先不用ajax