簡體   English   中英

使用json_encode()從PHP返回的Json對象,但是我的JavaScript中無效的json對象

[英]Json object returned from PHP with json_encode() , but then invalid json object in my javascript

我將從mySQL表讀取的簡單關聯數組回顯到json_encode($ array)方法的我的jquery bmo。 但是,我的.ajax調用在jquery中失敗,這似乎是由於該對象不是有效的json對象。 我在chrome中進行了一些調試,並在“網絡”標簽下驗證了響應預覽-確實看起來是完美的json格式:

{ “用戶名”: “DehanL”, “的userPassword”: “管理”, “USEREMAIL”: “dehan@rocketmail.com”}

這是我的PHP:

<html>
<body>

<?php



$servername = "localhost";
$username = "root";
$password = "";
$dbName ="dbPodiumPro";

$inUsername = $_POST["name"];
$inPassword = $_POST["password"];


// Create connection
$conn = new mysqli($servername, $username, $password, $dbName);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

//Use the dbPodiumPro
mysqli_select_db($conn,"dbPodiumPro");


$sql = "SELECT * FROM users WHERE UserName='$inUsername' AND UserPassword ='$inPassword' ";

$result = mysqli_query($conn,$sql);

// Fetch one row
$row=mysqli_fetch_assoc($result);

//Check to see if the username and password combo exists
if(!empty($row['UserName']) AND !empty($row['UserPassword'])) 
    { 

    //$_SESSION['UserName'] = $row['UserPassword']; 
    //echo $_SESSION; 

    echo json_encode($row);

    } 

else { echo "Be gone imposter!"; }


$conn->close();


?>

</body>
</html>

然后是jQuery:

$.ajax({
        type: 'POST', // define the type of HTTP verb we want to use (POST for our form)
        url: 'php/loginrequest.php', // the url where we want to POST
        data: formData, // our data object
        dataType: 'json' // what type of data do we expect back from the server

    })
    // using the done promise callback
    .done(function (data) {
        console.log("ajax done callback");
    })
    .fail(function (data) {
        console.log(data, "ajax failed callback");

        var IS_JSON = true;
        try {
            var json = $.parseJSON(data);
        } catch (err) {
            IS_JSON = false;
        }
        console.log(IS_JSON);
    });

在AJAX中將dataType作為JSON選項添加時,不需要parseJSON JSON。

ajax完成之后獲取的data已經是JSON格式。

“ json”:將響應評估為JSON並返回一個JavaScript對象。 JSON數據是嚴格解析的。 任何格式錯誤的JSON都會被拒絕,並引發解析錯誤。 從jQuery 1.9開始,空響應也被拒絕; 服務器應返回null或{}的響應。 (有關正確的JSON格式的更多信息,請參見json.org。)

文件: http//api.jquery.com/jQuery.ajax/

fail方法中的data不是您從服務器傳遞的。 它是與請求有關的信息。

您的PHP像這樣開始:

<html>
<body>

此后無論輸出什么,它都不會是有效的JSON。

我在chrome中進行了一些調試,並在“網絡”標簽下驗證了響應預覽

查看原始預覽。 您似乎正在查看渲染的 HTML預覽。

如果您正在使用MD5等對密碼進行編碼,Json將不會進行編碼,您可以選擇從數組中取消設置密碼,或者定義要從數據庫中選擇的列(不包括密碼列)。

將您的ajax更改為

$.ajax({
        type:"POST",
        url: 'php/loginrequest.php',
        data:$("#form_id").serialize(),
        dataType:"json",
        success: function(data)
        {
            alert(data.UserName);
        }
    });

您可以同時使用data:formDatadata:$("#form_id").serialize(),

如果您收到警報消息,那么一切正常

暫無
暫無

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

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