jquery+json+php异步请求执行不正确

邓凯 发布于 2013/08/08 17:32
阅读 968
收藏 0
jquery代码
$(function(){
			$("#inputemail").blur(function(){
				 var email = $("#inputemail").val(); 
    			 var password = $("#inputPassword").val(); 
    			 var patten = /\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/;
				if(email == ""){
					$("#inputemail-alert").css({visibility:"visible",display:"block"});
					$("#inputemail-alert").text("邮箱名不能为空!");
					$("#inputemail").focus(); 
					return false;
				}else if(!patten.test(email)){
					$("#inputemail-alert").css({visibility:"visible",display:"block"});
					$("#inputemail-alert").text("邮箱格式不正确!");
					return false;
				}else{  
					$("#inputemail-alert").css({visibility:"hidden",display:"none"});
					$.ajax({ 
				        type: "POST", 
				        url: "<{$app}>/member/regvalidate", 
				        dataType: "json", 
				        data: {"email":email},
				        success: function(json){
				        	if(json.success == 1){ 
				        		alert(json.success);
				        	}else{
				        		$("#inputemail-alert").css({visibility:"visible",display:"block"});
								$("#inputemail-alert").text("邮箱已经被注册!");
								return false;
				        	}
				        }
				    });
				}
			});
		});

php代码

function regvalidate(){
            $email = D("member");
            $data = $email->find($_POST["email"]);
            if (!$data) { 
            $arr['success'] = 1; 
            $arr['time'] = 2; 
            } else { 
                $arr['success'] = 0; 
                $arr['time'] = 3; 
                } 
            echo json_encode($arr); //输出json数据
            }

success后面的代码不会执行,我用CHROME调试看过了,PHP返回的JSON数组是正确的,有哪位大神能帮我看看吗?上次提问好多人帮忙的,怎么这次没人管了

以下是问题补充:

@邓凯:最终把$.AJAX换成$.POST之后解决了,哎,只能先这样了 (2013/08/09 15:35)
加载中
0
你若安好
你若安好
json.success 先把这个转成json的格式你那个返回的是json的字符串而不是对象应该要先转换成对象再使用
邓凯
邓凯
回复 @xiaochong0302 : 代码里面有,PHP的最后一行就是
小虫0302
小虫0302
回复 @邓凯 : 服务器返回的数据json_encode的了吗?
邓凯
邓凯
我已经在AJAX里面设定了datatype,这样就能直接使用返回的JSON字符串了呀
0
顺其自然001
顺其自然001
先alert(json)试试。
邓凯
邓凯
试过了,在SUCCESS之后的任何位置都无法打印JSON
0
nainc
nainc
eval一下吧
邓凯
邓凯
在什么位置?
0
那些年我们一起
那些年我们一起

url: "<{$app}>/member/regvalidate",
这个路径是不是有问题?<>这个是干嘛用的?


邓凯
邓凯
没有问题,这是处理请求的方法
0
那些年我们一起
那些年我们一起

function regvalidate(){
            $email = D("member");
            $data = $email->find($_POST["email"]);
            $arr['success'] = 0; 
            $arr['time'] = 3; 

            if (!$data) { 
                $arr['success'] = 1; 
                $arr['time'] = 2;  
            }   
            echo json_encode($arr); //输出json数据        
 }
改成这样,你看看alert还来获取到值么?


邓凯
邓凯
现在基本已经确定不是PHP的问题,因为PHP的输出结果已经有了:{“success”:1},现在的问题是AJAX无法接收这个数据
0
Fastpoint
Fastpoint
后面怎么样了?
邓凯
邓凯
继续等好心人中。。。。。哎
0
leo108
leo108
控制台里面有没有其他报错
邓凯
邓凯
把AJAX换成POST解决了,先这样吧,实在没精力弄了
leo108
leo108
回复 @邓凯 : error只有请求在超时、返回4XX之类的情况下才会被执行吧
邓凯
邓凯
然后在error里面我打印了json.success,出来的是一堆代码
邓凯
邓凯
没有,我后面把AJAX加上了ERROR函数之后,ERROR能够正确执行
0
nainc
nainc

success: function(json){

var data = eval(json);

alert(data.success);

}

试试- - ,没准好使

邓凯
邓凯
回复 @nainc : 把AJAX换成POST解决了,先这样吧,实在没精力弄了
nainc
nainc
不行的话在eval("("+json+")");试试
0
e
emohacker

引用来自“nainc”的答案

success: function(json){

var data = eval(json);

alert(data.success);

}

试试- - ,没准好使

要尽量避免使用eval

比如jquery1.5之前是不支持 $.ajax()中时不支持 dataType:"json" 这个属性配置的时候大家都会用

eval去处理,但是这样纸是不安全的

用 json =  (new Function("return "+json))();

但是这样的话json中不能包含回车换行

如果是非标准字符串获得的话 json.replace(/[\r\n]/g,"") 先这样替换一下

目测你这个是PHP返回的请求头问题

<?php
header('Content-type: application/json');
?>

也许这样就可以用$.ajax中可以用dataType:"json"

你说改成post可用,那我在怀疑是不是你的写法没有这样指定 dataType:"json"

返回顶部
顶部