Ajax调用返回SyntaxError:意外的输入结束

时间:2016-03-06 13:02:46

标签: javascript php jquery mysql ajax

我正在开发一个非常简单的记事本应用程序。 用户可以获取“一个文件”(实际上它只是来自MySQL的一行)来编辑它 当直接将表单提交给php文件(只删除e.preventDetfault)时,输出是我想要的json编码输出:

{"data":{"filename":"testfile","content":"this is the file content","lastupdate":"2016-03-06 13:13:30"}}

但是,当运行下面的Ajax调用时,它总是返回 SyntaxError:意外的输入结束。

表格

<form id="openfile" action="backend.php" method="POST">
<input type="text" name="filename" placeholder="Enter filename to open" id="filename" />
</form>

jQuery AJAX调用

$("#openfile").submit(function(e) {

  var filename = $("#filename").val();

  openFile(filename);

  e.preventDefault(); 

});


function openFile(filename) {

  if(filename == "") {
    return false;
  }


  $.ajax({
         type: "POST",
         url: "backend.php",
         data: {action: "load", file: filename},
         success: function(response) {
         console.log(response);
         },
         error: function(XMLHttpRequest, textStatus, errorThrown) {
            console.log("Status: " + textStatus);
            console.log("Error: " + errorThrown);
        }
       });

}

后端

      try {

        $db = new PDO(DB_DSN, DB_USER, DB_PASS);
        $sql = "SELECT `filename`, `content`, `lastupdate`
                FROM `notepad`
                WHERE `filename` = :filename
                LIMIT 1";
        $sth = $db->prepare($sql);
        $sth->bindParam(":filename", $_POST['file'], PDO::PARAM_STR);
        $sth->execute();

        if($sth->rowCount() != 0) {
          $result = $sth->fetch(PDO::FETCH_ASSOC);
           $response['data'] = $result;
          //echo json_encode($result);
        } else {
          $response['error'] = "File does not exist";
        }

      } catch(PDOException $e) {
        $response['error'] = $e->getMessage();
      }

      // Return json data
      echo json_encode($response);

我确信正在发送正确的数据(chrome dev tools - &gt; network)。

使用几乎相同的ajax调用来保存文件就可以了。

2 个答案:

答案 0 :(得分:0)

您的问题类似于: Chrome: Uncaught SyntaxError: Unexpected end of input

尝试为您的回复添加标题application/json

header('Content-Type: application/json');
echo json_encode($response);

答案 1 :(得分:0)

您是否尝试将dataType指定为Json?

dataType:'json',

在你的Ajax调用中

您正在发回一个json对象,但您尚未指定返回类型。