未捕获的SyntaxError:意外的令牌<在Chrome上

时间:2013-10-24 17:57:08

标签: json google-chrome

我知道这个问题已被多次询问,但我发现与我的问题没有相似之处。我只在Chrome中收到此错误,在其他浏览器中一切正常。我在几个地方用JSON返回数据,但由于我的代码在其他浏览器中工作,我认为它没有任何问题。 Chrome没有告诉我错误在哪里(在我的代码中)它显示了这些错误:

enter image description here

这就是我使用JSON的方式:

$.post("getData.php", {'id' : id}, function(data){
        var obj = jQuery.parseJSON(data);
.
.
.

... some mysqli query
$data = $query->fetch_assoc();
echo json_encode($data);

所以我在这里看不到问题,有人可以帮我解决这个问题。

15 个答案:

答案 0 :(得分:16)

您可以检查您的网络(控制台)并查看服务器的答案......“<”将是您回复的第一个字母。类似于“<”未定义的索引XY在行Z>“

答案 1 :(得分:7)

我对此的解决方案令人难以置信。

<script type="text/javascript" src="/js/dataLayer.js?v=1"></script>

src属性中的文件名必须为小写:

<script type="text/javascript" src="/js/datalayer.js?v=1"></script>

这有点莫名其妙地解决了这个问题。

在这两种情况下,参考都返回404进行测试。

答案 2 :(得分:6)

Uncaught SyntaxError: Unexpected token <使用@Mario回答时出错,但这只是我问题的一部分。另一个问题是,javascript没有从PHP文件中获取任何数据。这是在PHP文件中使用此代码解决的:header("Content-Type: text/javascript; charset=utf-8"); 这个答案可以在这个链接上找到,我在那里开了另一个问题来解决这个问题:Can't receive json data from PHP in Chrome and Opera

答案 3 :(得分:4)

在测试示例应用程序时,我在这两行中得到了同样的错误(&#34; Uncaught SyntaxError:Unexpected token&lt;&#34;)。

<script type = "text/javascript"  src="raphael-min.js"></script>
<script type = "text/javascript"  src="kuma-gauge.jquery.js"></script>

在控件之后,我意识到,本地文件位置不正确,我的本地服务器应用程序返回默认页面作为结果。客户端应用程序可以找到文件,但创建的文件是默认页面,而不是* .js文件。所以我收到Uncaught SyntaxError:Unexpected token&lt;

我改变了intenet上的原始位置并解决了。

<script type = "text/javascript"  src="//cdnjs.cloudflare.com/ajax/libs/raphael/2.1.2/raphael-min.js"></script>
<script type = "text/javascript"  src="//www.jqueryscript.net/demo/Creating-Animated-Gauges-Using-jQuery-Raphael-js-kumaGauge/js/kuma-gauge.jquery.js"></script>

答案 4 :(得分:2)

要覆盖您在Chrome中(可能在Safari中)可能遇到的错误,请尝试将Ajax参数设置为dataType: "json"。然后,您不应在parseJSON()上致电obj,因为您获得的回复会被反序列化。

答案 5 :(得分:1)

我已对此代码进行了评论:// $('#description').val('<?php echo $_POST['description']; ?>');我收到了该错误。

答案 6 :(得分:1)

header("Location: route_to_main_page");

我在使用自定义404错误处理文件时遇到此问题。它不是抛出一些html内容,而是重定向到主页面url。它运作良好。

然后我将其用作下一个项目的骨架,因此不会更改&#34; route_to_main_page&#34;实际上在新项目(不同的URL)上变成了&#34; route_to_external_url&#34;所以代码中的任何404错误(缺少css样式表,js库)都会返回&#34; 未捕获的SyntaxError:意外的令牌&lt; &#34;。

答案 7 :(得分:0)

如果您尝试执行Ajax文件上传或类似的操作,则必须在打印ajax响应文本后摆脱显示更多HTML。可能会出现此错误消息。如果您使用的是PHP框架,则必须遵循框架语法来结束应用程序。如果您正在编写纯PHP代码,则可以在ajax响应文本后使用“exit”。

希望这有助于节省一些人为此找到解决方案的时间。 :)快乐的编码!!!

答案 8 :(得分:0)

将其更改为

$.post({ 
         url = 'getData.php',  
         data : { 'id' id } , 
         dataType : 'text'
       });

这样ajax就不会尝试将数据解析为json或类似的

答案 9 :(得分:0)

似乎每个人都有不同的经验,以及其他解决方案:)这是我的故事&#34;。

我的东西来自一个用ajax获取的validate.php文件。输出意味着:

$response['status'] = $status;
$response['message'] = $message;
$response['param'] = $param;

echo json_encode($response);

导致&#34;意外令牌&lt;&#34;错误只是在某些情况下$ message没有被声明(但只有$ status和$ param)。所以,在代码的开头添加了这个。

$message = ''; // Default value, in case it doesn't get set later on.

所以我想,那些&#34;小事情&#34;可能在这种情况下非常重要。所以一定要检查你的代码并使其具有防弹性。

答案 10 :(得分:0)

有同样的错误。我的问题是由于我的项目目录转移,并且未能调整服务器上静态文件的路径以反映新路径(即./src/public但应该是./public)。

答案 11 :(得分:0)

当我将一些js文件移动到文件夹然后部署到生产中时,我遇到了类似的问题,经过一番努力后我发现js文件实际上没有部署到生产中。所以

  1. 确保显示错误的文件确实存在 服务器
  2. 给出的路径是正确的
  3. 因此,在没有js文件的情况下,服务器然后服务器响应如下

    <!doctype html>
        <html>
            <someTag />
            <AnotherTag />
        </html>
    

    这就是为什么我们得到 未捕获的SyntaxError:意外的令牌&lt;

答案 12 :(得分:0)

我唯一能为我工作的地方是将脚本放在我public所在的index.html文件夹中,然后将这些<script type="text/javascript" src="test/test.js"></script>放在<body>标记内。

答案 13 :(得分:0)

可能是您尝试请求的资源通过您的网络应用配置受到限制访问,即必须记录用户才能让应用程序为该文件提供服务。

尝试将此添加到您的Web.Config文件(这适用于.NET应用程序):

<location path="js/resourcefile.js">
  <system.web>
    <authorization>
      <allow users="?" />
    </authorization>
  </system.web>
</location>

您可以将其放在关闭配置标记之前的任何位置。

答案 14 :(得分:0)

就我而言,主机已在我的 iisnode 文件中启用了 web.config,因此我已发表评论。

<?xml version="1.0" encoding="UTF-8"?>
 <configuration>
   <system.webServer>
    <handlers>
        <!-- <add name="iisnode" path="*.js" verb="*" modules="iisnode" /> -->
    </handlers>
  </system.webServer>
 </configuration>