Heim > Backend-Entwicklung > PHP-Tutorial > javascript – Ajax-Fehler beim Abrufen von JSON-Daten vom Server, JSON.parse(xhr.responseText),,,?

javascript – Ajax-Fehler beim Abrufen von JSON-Daten vom Server, JSON.parse(xhr.responseText),,,?

WBOY
Freigeben: 2023-03-01 18:00:01
Original
1941 Leute haben es durchsucht

HTML-Seite:

<code><!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>

</head>

<body>
<form action="reg.php" method="post" >
    用户名 : <input id="input1" type="text" name="username">   
    <input type="submit" value="注册">
</form>
<div id="div1"></div>
<script>
var oInput = document.getElementById('input1');
var oDiv = document.getElementById('div1');

oInput.onblur = function(){
    var xhr = new XMLHttpRequest();
    xhr.open('GET','ajax.php?username='+encodeURIComponent(this.value),true);
    xhr.onreadystatechange = function(){
        
        if(xhr.readyState == 4){
            
            if(xhr.status == 200){
                
                var obj = JSON.parse(xhr.responseText);
                if(obj.code){
                    oDiv.innerHTML = obj.message;
                }
                else{
                    oDiv.innerHTML = obj.message;
                }
            }
        }
        
    };
    xhr.send(null);
};

</script>
</body>
</html></code>
Nach dem Login kopieren
Nach dem Login kopieren

php-Seite:

<code><?php
    header('Content-type:text/html;charset=utf-8');
    $conn = mysqli_connect('127.0.0.1', 'root', '5221107073', 'linshi');
    $name = $_GET['username'];
    $sql = "SELECT * FROM shi where name='$name'";
    $res = mysqli_query($conn, $sql);
    if($res && mysqli_num_rows($res)){
        echo "{'code':'0','message':'该名字有人注册'}";
    }else{
        echo "{'code':'1','message':'ok'}";
    }
    
?></code>
Nach dem Login kopieren
Nach dem Login kopieren

Die JSON-Daten können nicht vom Server abgerufen werden und der Fehler lautet wie folgt:

<code>SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data</code>
Nach dem Login kopieren
Nach dem Login kopieren

Lösung

Antwortinhalt:

HTML-Seite:

<code><!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>

</head>

<body>
<form action="reg.php" method="post" >
    用户名 : <input id="input1" type="text" name="username">   
    <input type="submit" value="注册">
</form>
<div id="div1"></div>
<script>
var oInput = document.getElementById('input1');
var oDiv = document.getElementById('div1');

oInput.onblur = function(){
    var xhr = new XMLHttpRequest();
    xhr.open('GET','ajax.php?username='+encodeURIComponent(this.value),true);
    xhr.onreadystatechange = function(){
        
        if(xhr.readyState == 4){
            
            if(xhr.status == 200){
                
                var obj = JSON.parse(xhr.responseText);
                if(obj.code){
                    oDiv.innerHTML = obj.message;
                }
                else{
                    oDiv.innerHTML = obj.message;
                }
            }
        }
        
    };
    xhr.send(null);
};

</script>
</body>
</html></code>
Nach dem Login kopieren
Nach dem Login kopieren

php-Seite:

<code><?php
    header('Content-type:text/html;charset=utf-8');
    $conn = mysqli_connect('127.0.0.1', 'root', '5221107073', 'linshi');
    $name = $_GET['username'];
    $sql = "SELECT * FROM shi where name='$name'";
    $res = mysqli_query($conn, $sql);
    if($res && mysqli_num_rows($res)){
        echo "{'code':'0','message':'该名字有人注册'}";
    }else{
        echo "{'code':'1','message':'ok'}";
    }
    
?></code>
Nach dem Login kopieren
Nach dem Login kopieren

Die JSON-Daten können nicht vom Server abgerufen werden und der Fehler lautet wie folgt:

<code>SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data</code>
Nach dem Login kopieren
Nach dem Login kopieren

Lösung

Die Header-Einstellung ist falsch. Diese Einstellung gibt HTML im UTF-8-Format aus.
Verwenden Sie

<code>header('Content-type: application/json');</code>
Nach dem Login kopieren

Auf diese Weise liegen die Echodaten im JSON-Format vor.
Es wird empfohlen, den auszugebenden Inhalt in einem Array zu speichern und

dort zu verwenden, wo er ausgegeben werden soll.
<code>echo json_encode($array);</code>
Nach dem Login kopieren

Ich habe es noch nicht ausprobiert. Versuchen Sie es nicht direkt so. Schreiben Sie es stattdessen anders, definieren Sie ein Array und dann json_encode().

Das vom Backend zurückgegebene Format ist falsch

<code class="php">echo '{"code":"0","message":"该名字有人注册"}'</code>
Nach dem Login kopieren

Das Format ist falsch, es gibt doppelte Anführungszeichen in JSON.
Diese Art

<code>echo '{"code":"0","message":"该名字有人注册"}'</code>
Nach dem Login kopieren

Ich gebe die vom Server erhaltenen Ergebnisse auf der Startseite „if(xhr.readyState == 4){

“ aus
<code>        if(xhr.status == 200){
            console.log(xhr.responseText);
            console.log(JSON.parse(xhr.responseText));
        }
    }`</code>
Nach dem Login kopieren

Das sehen Sie auf der Konsole (d. h. gibt es ein Problem beim Abrufen von xhr.responseText?): javascript – Ajax-Fehler beim Abrufen von JSON-Daten vom Server, JSON.parse(xhr.responseText),,,?

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage