Json对象从PHP返回json_encode(),但在我的javascript中无效的json对象

I echo a simple associative array read from a mySQL table back to my jquery b.m.o the json_encode($array) method. However, my .ajax call fails back in the jquery and it seems due to the object not being a valid json object. I did some debugging in chrome and under the network tab verified the response preview- does indeed look to be in perfect json format:

{"UserName":"DehanL","UserPassword":"admin","UserEmail":"dehan@rocketmail.com"}

Here is my 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>

Then the 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);
    });
doutu6616
doutu6616 注意到注射和其他安全问题,将根据您的建议予以解决。这只是让一些服务器调用功能的第一次尝试。
5 年多之前 回复
douping7105
douping7105 您是否将密码编码为md5,如果是这样,请检查此stackoverflow.com/a/30097151/2536812
5 年多之前 回复
dongxuanchao1425
dongxuanchao1425 您的代码可以是SQL注入的,但这与您的问题无关。通过使用'OR1OR''='或类似密码,您可以登录。还要在密码上使用哈希!
5 年多之前 回复
dpa55065
dpa55065 危险:“根本没有散列”是一种不合适的散列算法;您需要更好地照顾用户的密码。
5 年多之前 回复
dongshuxi3105
dongshuxi3105 危险:您很容易受到需要保护自己的SQL注入攻击。
5 年多之前 回复
douju6542
douju6542 您是否在服务器上使用Content-Type:application/json?否则,即使文本格式正确,客户端也可能认为它不是有效的JSON
5 年多之前 回复

4个回答



您的PHP如下所示:</ p>

 &lt; html&gt; 
&lt; body&gt ;
</ code> </ pre>

在此之后输出的其他内容,它不会是有效的JSON。</ p>


我在chrome中进行了一些调试,并在网络选项卡下验证了响应预览</ p>
</ blockquote>

查看原始预览。 您似乎正在查看呈现的</ em> HTML预览。</ p>
</ div>

展开原文

原文

Your PHP starts like this:

<html>
<body>

Whatever else it outputs after that, it isn't going to be valid JSON.

I did some debugging in chrome and under the network tab verified the response preview

Look at the raw preview. You seem to be looking at the rendered HTML preview.

dosrmo0442
dosrmo0442 这确实是个问题。 错误地认为php需要包含在我看到的样本中的那些标签中。 解决了。
5 年多之前 回复



当您将 dataType </ code>添加为JSON时,您不需要 parseJSON </ code> AJAX中的选项。</ p>

ajax </ code>完成后你得到的 data </ code>已经是JSON格式。</ p> \ n


“json”:将响应计算为JSON并返回JavaScript对象。 JSON数据以严格的方式解析; 任何格式错误的JSON都会被拒绝,并抛出一个解析错误。 从jQuery 1.9开始,空响应也被拒绝; 服务器应该返回null或{}的响应。 (有关正确JSON格式的更多信息,请参阅json.org。)</ p>
</ blockquote>

文档: http://api.jquery.com/jQuery.ajax/ </ p>

里面的 data </ code> > fail </ code>方法不是您从服务器传递的方法。 它是与请求相关的信息。</ p>
</ div>

展开原文

原文

You don't need to parseJSON when you have added dataType as JSON option in the AJAX.

The data you are getting after ajax is completed is already in JSON format.

"json": Evaluates the response as JSON and returns a JavaScript object. The JSON data is parsed in a strict manner; any malformed JSON is rejected and a parse error is thrown. As of jQuery 1.9, an empty response is also rejected; the server should return a response of null or {} instead. (See json.org for more information on proper JSON formatting.)

Docs: http://api.jquery.com/jQuery.ajax/

The data inside fail method is not what you've passed from server. It is the information related to the request.

dongxi0605
dongxi0605 显示相关的PHP代码。
5 年多之前 回复
dongliaoqiang8524
dongliaoqiang8524 Tushar,parseJSON部分只是检查另一个成员建议的json对象的有效性。 所以是@ devnull69问题是当调试信息显示正确的响应时它进入.fail的原因。 我听说过故障循环中的数据。 .done中的数据将是从我的ajax调用返回到正确的Tushar?
5 年多之前 回复
douxi4287
douxi4287 我认为问题是为什么它会进入.fail回调...
5 年多之前 回复



如果您使用MD5等编码密码,Json将不编码您可以选择取消您的阵列密码或 定义要从数据库中选择的列,不包括密码列。</ p>
</ div>

展开原文

原文

If you are encoding your password using MD5 and the likes, Json will not encode you can choose to unset the password from you your array or define the column you want to select from your database excluding password column.



将您的ajax更改为</ p>

  $ .ajax({
type:“ POST“,
url:'php / loginrequest.php',
data:$(”#form_id“)。serialize(),
dataType:”json“,
success:function(data)
{

alert(data.UserName);
}
});
</ code> </ pre>

您可以使用 data:formData </ code>或< code> data:$(“#form_id”)。serialize(),</ code> </ p>

如果您收到警报消息,那么一切正常</ p>
</ DIV>

展开原文

原文

Change your ajax as

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

you can use both data:formData or data:$("#form_id").serialize(),

if you are getting alert message then everything is working fine

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐