簡體   English   中英

JSON 中位置 0 處的意外標記 N 使用 ajax

[英]Unexpected token N in JSON at position 0 using ajax

對於 ajax 和 php 編碼文件,我收到“位置 0 處的 JSON 中的意外標記 N”。 有人可以幫我解決這個問題嗎? 我剛開始編碼。

如果數據類型是文本,我可以讓查詢工作並插入數據。 但是當我嘗試獲取數據時,來自 php 文件的 echo 內容的結果顯示為 function(data)。 我能做什么?

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Build an API</title>
    <style>
        .btn {
            border: 1px solid black;
            padding: 10px;
            display: inline-block;
        }
    </style>

</head>

<body> 

ID :
    <input type="number" name="xid" id="xid" value="1">
    <br> Name :
    <input type="text" name="name" id="name" value="tester">
    <br> Company :
    <input type="text" name="company" id="company" value="company">
    <br> Cost :
    <input type="number" name="cost" id="cost" value="10">
    <br>
    <div class='btn' id="btn1">Send Data</div>
    <div class='btn' id="btn2">Get Data</div>

    <div id="result"></div>
    <div id="sample"></div>



    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 
    <script>
        $(function () {
            //FIRST BUTTON
            $('#btn1').on('click', function () {
                var vars = {
                    xid: $('#xid').val()
                    , name: $('#name').val()
                    , company: $('#company').val()
                    , cost: $('#cost').val()
                    , action:'ADD'
                }
                $.ajax({
                    url: "api.php"
                    , data: vars
                    , type: "POST"
                    , dataType: 'json'
                }).done(function (data) {
                    $("#result").html(data).message;
                    console.log(data);
                    alert('DONE: ' + data);
                }).fail(function (xhr, textstatus,errorThrown) {
                    console.log(xhr);
                    console.log(textstatus);
                    //alert('xhr, textstatus: ' + xhr + textstatus);
                    alert("errorThrown    : " + errorThrown.message);
                    console.log("errorThrown    : " + errorThrown.message);
                })
            })
        })
    </script>
</body>

</html>


<?php
header('Content-Type: application/json; charset=utf-8');

$con = new mysqli("localhost","[name]","[password]","myDB");
if (!$con) {
    die("Connection failed: " . mysqli_connect_error());
}
$arr = [];

if($con->ping()){$arr['connected']=true;}else{$arr['connected']=false;}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $arr['xid'] = $_POST['xid'];
    $arr['name'] = $_POST['name'];
    $arr['company'] = $_POST['company'];
    $arr['cost'] = $_POST['cost'];   
    $arr['action'] = $_POST['action'];    
}else{
    $arr['xid'] = '100';
    $arr['name'] = 'noname';
    $arr['company'] = 'company';
    $arr['cost'] = '100';    
    $arr['action'] = 'ADD';
}

$xid = $arr['xid'];
$name = $arr['name'];
$company = $arr['company'];
$cost = $arr['cost'];  

if($arr['action']=='ADD'){   
    if(isset($xid) && isset($name) && isset($company) && isset($cost)){
        $sql = "INSERT INTO api (xid, cost, name, company) VALUES ('$xid', '$cost', '$name', '$company')";
        if (mysqli_query($con, $sql)) {
            echo "New record created successfully";
        } else {
            echo "Error: " . $sql . "<br>" . mysqli_error($con);
        }
        mysqli_close($con);
    }
}   
?>

有了這個,您宣布響應將采用 JSON 格式:

header('Content-Type: application/json; charset=utf-8');

但是幾行之后你返回純文本:

echo "New record created successfully";

要么將標題更改為

header('Content-Type: text/plain; charset=utf-8');

或者您將響應更改為這樣的

echo json_encode(["message"=>"New record created successfully"]);

由於您將dataType: 'json'放在 javascript 中,因此您必須將 php 頁面的所有返回(成功和失敗返回)與json_encode("...");

或者

在 javascript 中將dataType: 'json'更改為dataType: 'text'

並更改 php

header('Content-Type: application/json; charset=utf-8');

header('Content-Type: text/plain; charset=utf-8');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM