Uncaught (in promise) SyntaxError: Unexpected token < in JSON at position 0 Promise [重复]

Posted

技术标签:

【中文标题】Uncaught (in promise) SyntaxError: Unexpected token < in JSON at position 0 Promise [重复]【英文标题】:Uncaught (in promise) SyntaxError: Unexpected token < in JSON at position 0 Promise [duplicate] 【发布时间】:2020-03-26 12:13:47 【问题描述】:

我正在尝试将表单中的数据插入数据库。我尝试使用 Fetch 来做到这一点,所以一切都会更加动态。

这是我的 php 文件:

if (!empty($_POST['action'])) 
  if ($_POST['action'] == 'confirm') 
    $data =  array(
      'city_id' => $_GET['city_id'],
      'pub_id' => $_POST['pubs'],
      'beer_id' => $_POST['beers'],
      'snack_id' => $_POST['snacks'],
      'location_id' => $_POST['locations'],
      'daytime' => $_POST['daytime'],
      'participants' => $_POST['participants']
     );

  $insertedCrawl = $this->crawlsDAO->insertCrawl($data);
    if (!$insertedCrawl) 
      $errors = $this->crawlsDAO->validate($data);
      $this->set('errors', $errors);
    if (strtolower($_SERVER['HTTP_ACCEPT']) == 'application/json') 
      header('Content-Type: application/json');
        echo json_encode(array(
          'result' => 'error',
          'errors' => $errors
        ));
      exit();
    

    $_SESSION['error'] = 'De crawl kon niet toegevoegd worden!';

     else 
        if (strtolower($_SERVER['HTTP_ACCEPT']) == 'application/json') 
          header('Content-Type: application/json');
            echo json_encode(array(
              'result' => 'ok',
              'crawl' => $insertedCrawl
           ));
        exit();
      

      $_SESSION['info'] = 'De crawl is toegevoegd!';
        header('Location: index.php');
        exit();
      
    
  

javascript 中,我尝试将此数据提取到 JSON。

这是我的 Javascript 代码:

const handleSubmitCrawlForm = e => 
  e.preventDefault();
  fetch($crawlForm.getAttribute("action"), 
    headers: new Headers(
    Accept: `application/json`
   ),
    method: "post",
    body: new FormData($crawlForm)
   )
      .then(r => r.json())
      .then(data => handleLoadSubmit(data));
      ;

const handleLoadSubmit = data => 
  const $errorText = document.querySelector(`.error`);
  $errorText.textContent = "";
    if (data.result === "ok") 
      loadCrawls();
      else 
       if (data.errors.text) 
         $errorText.textContent = data.errors.text;
       
     
   ;

不知怎的,我最终得到了这个错误:

Uncaught (in promise) SyntaxError: Unexpected token < in JSON at position 0

这是因为我向服务器发出请求并将响应解析为 JSON,但它不是 JSON。

【问题讨论】:

您的 FormData 对象是否设置了 action$_POST['action']?如果没有设置操作值会怎样? 【参考方案1】:

这看起来您的 PHP 文件返回的不是您期望它返回的 json 数组。

最常见的问题之一是 ?> 之后的尾随空格或换行符,如果您关闭了 php 标签,您可能需要检查这些标签。

您还可以使用 google chrome 控制台 -> 网络选项卡查看您的 PHP 提供的导致 JSOn 验证失败的确切响应。

【讨论】:

以上是关于Uncaught (in promise) SyntaxError: Unexpected token < in JSON at position 0 Promise [重复]的主要内容,如果未能解决你的问题,请参考以下文章

解决Uncaught (in promise) reason的问题

Uncaught (in Promise) DOMException: play() 只能由用户手势启动

解决Uncaught (in promise) reason的问题

Uncaught (in promise):消息端口在收到响应之前关闭

vue控制台报 Uncaught (in promise) TypeError:

Uncaught (in promise) TypeError: Cannot set properties of null (setting 'innerText') in OpenWetherMa