JS请求报错:Unexpected token T in JSON at position 0

<?php 
/*
最近做一个ajax validate表单验证提交的代码,在ajax提交的时候
JS请求报错:Unexpected token T in JSON at position 0

描述:

这是一个请求,参数的地方报这要的错,请问是为什么?
百思不得其解啊
解决方案1:

去看下json的格式要求,JSON.parse()方法对json串要求很严格
解决方案2:

http://www.bejson.com/
用这个网址测试试试json格式是不是有误,换行,单引号什么的会导致报错,格式要求很严格

以下会导致报错:
JSON字符串里的非数字型键值没有双引号
JSON中存在t这样的制表符,看起来和空格一样,但是就是因为它的存在校验不通过。去掉就能过了。
编辑器有bom头也会造成
解决方案3:

某个地方用了JSON.parse,但是传入的参数不是一个合格的json字符串。

以上介绍了“ (javascript)JS请求报错:Unexpected token T in JSON at position 0”的问题解答,希望对有需要的网友有所帮助。

*/

/**
*js ajax发送代码
*/

 $.validator.setDefaults({
    submitHandler: function() {
      // alert("提交事件!");return false;
       var query=new Object();
        query.user_name=$('#user_name').val();
        query.sex=$('#sex').val();
        query.country=$('#country').val();
        query.email=$('#email').val();
        query.mobile=$('#mobile').val();
        query.weixin=$('#weixin').val();
        query.address=$('#address').val();
        query.messages=$('#messages').val();
        var url="/controller/apply.php";
        $.ajax({
            url:url,
            type:"POST",
            data:query,
            dataType:"json",
            success:function(res){
                if(res.status==1){
                    alert(res.msg);
                    window.location.replace("http://www.fxbob.com/a/zhongwen/hezuohuoban/20170620/21.html");
                }else{
                    alert(res.msg);
                }
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) {
            	console.log(XMLHttpRequest);
            	 // console.log(errorThrown);
				 alert(XMLHttpRequest.status);
				 alert(XMLHttpRequest.readyState);
				 alert(textStatus);
			},
			complete: function(XMLHttpRequest, textStatus) {
			 	this; // 调用本次AJAX请求时传递的options参数
			}
        });
        return false;
    }
});


/**
*php的ajax接收代码Apply.php如下:
*/


<?php 
// header("Content-type: text/html; charset=utf-8");
define('DEDEMOB', 'Y');
require_once(dirname(__FILE__)."/../include/common.inc.php");
//加载邮件类
require_once(dirname(__FILE__)."/../include/Smtp.class.php");
if($_POST){
	$data=$_POST;
	$str=<<<EOT
	<html>
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf8" />
        <title>Untitled Document</title>
        </head>
        <body>
       		<p>全名:{$data['user_name']}</p>
       		<p>性别:{$data['sex']}</p>
       		<p>国家:{$data['country']}</p>
       		<p>地址:{$data['address']}</p>
       		<p>邮箱:{$data['email']}</p>
       		<p>手机:{$data['mobile']}</p>
       		<p>微信:{$data['weixin']}</p>
       		<p>留言:{$data['messages']}</p>
        </body>
    </html>
EOT;
	//ib@fxbob.com
	//******************** 配置信息 ********************************
	$smtpserver = "smtp.163.com";//SMTP服务器
	$smtpserverport =25;//SMTP服务器端口
	$smtpusermail = "hmb9981541@163.com";//SMTP服务器的用户邮箱
	$smtpemailto = "ib@fxbob.com";//发送给谁
	$smtpuser = "hmb9981541@163.com";//SMTP服务器的用户帐号,注:部分邮箱只需@前面的用户名
	$smtppass = "rainliu213";//SMTP服务器的用户密码
	$mailtitle = "申请经纪人";//邮件主题
	$mailcontent = $str;//邮件内容
	$mailtype = "HTML";//邮件格式(HTML/TXT),TXT为文本邮件
	//************************ 配置信息 ****************************
	$smtp = new Smtp($smtpserver,$smtpserverport,true,$smtpuser,$smtppass);//这里面的一个true是表示使用身份验证,否则不使用身份验证.
	// $smtp->debug = true;//是否显示发送的调试信息
	$state = $smtp->sendmail($smtpemailto, $smtpusermail, $mailtitle, $mailcontent, $mailtype);
	if($state){
		$res['status']=1;
		$res['msg']="提交成功,请等待申核";
	}else{
		$res['status']=0;
		$res['msg']="网络忙,提交失败,请稍候再尝试";
	}
	echo  json_encode($res);exit;
}





/**
*最后在网上查了好多这方面的错误,排查到是这个apply.php文件带bom头导致json解析错误导致引起了,一个小小json排查错误花了三个小时时间。无语了
*/

 

posted @ 2017-07-19 18:08  天涯alone  阅读(15163)  评论(0编辑  收藏  举报