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;
	//[email protected]
	//******************** 配置信息 ********************************
	$smtpserver = "smtp.163.com";//SMTP服务器
	$smtpserverport =25;//SMTP服务器端口
	$smtpusermail = "[email protected]";//SMTP服务器的用户邮箱
	$smtpemailto = "[email protected]";//发送给谁
	$smtpuser = "[email protected]";//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排查错误花了三个小时时间。无语了
*/
时间: 2024-11-03 01:18:15

JS请求报错:Unexpected token T in JSON at position 0的相关文章

js解析json时报:Unexpected token s in JSON at position 0

原因肯定是返回的json格式有问题 最有可能是后台在程序执行过程中,输出了某些调试信息等等,这些输出的字符串和json拼接成了新的字符串来解析,这时就会报错: 比如我在入口文件里var_dump了__DIR__,这时在请求json时返回正常数据,但是在JOSN.pares()时就报错,删了var_dump后就正常执行. 原文地址:https://www.cnblogs.com/frankltf/p/8684971.html

webpack打包报错Unexpected token

最近项目要上线,需要对项目进行打包部署到服务器上面,在打包过程中npm run build后出现以下报错Unexpected token: punc (() [./~/[email protected]@element-ui/packages/col/src/col.js:23,0][static/js/0.3fbe30ed5a683f62d6bc.js:13890,10] 字面意思是报错来自UglifyJs,在col.js下23行出现了不期望的'(',打开col.js文件查看 不能识别这个函数

关于Uncaught SyntaxError: Unexpected token o in JSON at position 1,chrome持续报错的相关解析

今天跟大家分享我前两天遇见的一个BUG,说出来很难受,因为这个BUG花了我一个多小时去找原因,后来莫名其妙的故障消失了,强迫症犯了的我,居然花了2个多小时去故意再制造这个BUG,只想弄明白WHY???结果大家应该都猜到了,哈哈,没找到!!!没错,居然没找到!!!不过类似于Uncaught SyntaxError: Unexpected token ' in JSON at position 2的错误... 关于JOSN的方法,大家通过百度应该都深刻理解它的用法:parse用于从一个字符串中解析出

Unexpected token o in JSON at position 1 报错原因

写在前面的话这个问题在之前做项目时碰到过一次,当时按照网上的做法,去掉JSON.parse()这一层转换后就没有这个报错了,数据也能正常使用,就没多想,也没深究是什么原因. 可是这次又碰到了,所以这次必须要弄明白原因. 先看看它的作用JSON.parse()用于从一个字符串中解析出json对象,如 var str = '{"name":"LeonWu","age":"18"}' JSON.parse(str); //结果为一个

VM603:1 Uncaught SyntaxError: Unexpected token o in JSON at position 1

再用JQuery解析json的时候出现了这样一个问题 VM603:1 Uncaught SyntaxError: Unexpected token o in JSON at position 1 通过查阅资料发现,是由于解析json文件的时候解析到object而引起的错误.通过console.log的输出,发现输出的结果是一个类似于数组的输出内容. 通过寻找发现由于JQuery版本的升级,JQuery的ajax方法发生了变化,ajax的sucess的回调值直接将json解析,造成了这种错误. 所

JSONP跨域请求数据报错 “Unexpected token :”的解决办法

原文  http://www.cnphp6.com/archives/65409 Jquery使用ajax方法实现jsonp跨域请求数据的时候报错 “Uncaught SyntaxError: Unexpected token :”,主要问题在于返回的数据格式不正确 本地虚拟两个域名,分别为:www.test.com.www.abc.com http://www.test.com/index.html页面点击按钮,请求返回 www.abc.com域名目录下的文件的数据 ,其代码为: <!DOCT

firefox同步ajax请求报错的问题 A parameter or an operation is not supported by the underlying object

今天在测试系统时,一个很正常的功能在firefox下报错,经过验证在ie和chrome浏览器中功能这个正常.   调试后发现: 请求比其他请求的特殊点在于同步请求.   经过firefox的控制台上测试发现错误日志:   "[Exception... "A parameter or an operation is not supported by the underlying object" code: "15" nsresult: "0x805

eclipse忽略js文件报错

eclipse中js文件报错的情况,或许大家早已习以为常了,那么有什么好的方法可以将其忽略掉呢?如果你也在寻找此问题,那么本文或许可以帮助到你忽略某个js文件报错的方法: Project Properties > JavaScript > Include Path > Source > 选中Exclude > 点击edit按钮 > 在下面的 Exclusion patterns 中添加对应的文件. 截图如下 详细出处参考:http://www.jb51.net/arti

从async await 报错Unexpected identifier 谈谈对上下文的理解

原文首发地址:http://www.cnblogs.com/lonhon/p/7518231.html 先简单介绍下async await: async/await是ES6推出的异步处理方案,目的也很明确:更好的实现异步编程.   详细见阮大神 ES6入门 现在说说实践中遇到的问题:使用await报错Unexpected identifier 先上代码: var sleep = function (time) { return new Promise(function (resolve, rej