Heim  >  Artikel  >  Backend-Entwicklung  >  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
WBOYOriginal
2016-12-01 00:25:451888Durchsuche

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>

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>

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>

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>

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>

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>

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>

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>

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>

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

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

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>

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),,,?

Stellungnahme:
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