我在从PHP接收JSON对象时遇到问题。我可以提醒它并使用dataType: 'text'
得到一个(我认为正确的)JSON对象,但不要像data.message
那样使用它 - >它是“未定义的”。使用dataType: 'json'
,'jsonp'
或ajax调用$.getJSON
它不起作用(它不会触发此请求)。
AJAX
$('#login').click(function () {
var name = $('#username').val();
var pass = $('#password').val();
$.ajax({
url: "http://localhost/weltenbummler/Weltenbummler1/Weltenbummler1/app/login.php?username=" + name + "&password=" + pass,
dataType: 'text',
type: 'GET',
success: function (d) {
alert(d);
alert(d.message);
}
});});
警告JSON
{"status":"f","message":"Benutzername und Passwort stimmen nicht ueberein"}
或
{"status":"t","message":"Erfolgreich eingeloggt!","data":{"id":"1","mail":"abc","password":"123"}}
我在jsonlint.com上测试了收到的字符串,它应该是有效的。我尝试JSON.parse(data)
,$.parseJSON(data)
什么行不通。
JSON.stringify(data)
正在使用斜杠返回JSON(我不知道为什么)。
Postman也可以在HTML,文本,XML或JSON中阅读它......
在php中我试图将标题更改为
header("Content-type: application/json; charset=utf-8");
或强制响应为JSON。
connect.php文件:
<?php
$host = "127.0.0.1";
$user= "root";
$pw="";
$db = "weltenbummler";
//Create connection
$con = new mysqli($host,$user,$pw,$db);
//Check connection
if($con->connect_error){
die("Connection failed: " .$con->connect_error);
}?>
login.php文件:
<?php
header('Content-type: application/json');
require 'connect.php';
$username = $_GET['username'];
$password = $_GET['password'];
$response = array();
if(empty($username)){
$response = array(
"status " => " f",
"message " => " Gebe einen Benutzernamen ein!"
);
die(json_encode($response));
}
if(empty($password)){
$response = array(
"status" => "f",
"message"=> "Gebe ein Passwort ein!"
);
die(json_encode($response));
}
$sqlstatement= ("SELECT id,mail,password FROM user WHERE mail = '$username' AND password = '$password'");
$result = mysqli_fetch_assoc($con->query($sqlstatement));
if (!$result) {
$response = array(
"status" => "f",
"message" => "Benutzername und Passwort stimmen nicht ueberein"
);
} else {
$response = array(
"status" => "t",
"message" => "Erfolgreich eingeloggt!",
"data" => $result
);
}
$con->close();
echo json_encode($response);?>
编辑1:
一旦我使用dataType: 'json'
我什么也得不到(甚至不是字符串),所以我继续使用'text'。我的PHP文件是否需要更改才能接收JSON?
以下是我尝试评论的内容:
console.log(typeof d);
返回字符串
alert(JSON.stringify(d));
返回"{\"status\":\"f\",\"message\":\"Benutzername und Passwort stimmen nicht ueberein\"}"
alert(JSON.parse(d));
返回Uncaught SyntaxError: Unexpected token in JSON at position 0
还有其他建议吗?谢谢!
答案 0 :(得分:1)
试试这个
$.ajax({
url: 'http://localhost/weltenbummler/Weltenbummler1/Weltenbummler1/app/login.php?username=' + name + '&password=' + pass,
dataType: 'json',
type: 'get',
success: function (e) {
alert( JSON.parse(e.message) ); // undefined
}
});
答案 1 :(得分:0)
您可以使用chrome开发人员读出确切收到的数据: 1.我收到了一个隐藏变量的字符串:#$ 63434; {“status”:false,...} 和2.用PHP错误以及
至1:
PHP缓冲变量触发代码 - &gt;将其范围与ob_start();
和ob_end_clean();
参考:https://stackoverflow.com/a/9985307/8036245
To 2。:修复你的PHP代码:我遇到了问题,没有定义变量警告缺少参考
之后我甚至可以触发$ .getJSON(..)调用! 希望这将有助于somone :)
答案 2 :(得分:-1)
contentType
是发送到服务器的标头,指定特定格式。
示例:我正在发送json或XML dataType
你告诉jQuery期待什么样的回应。
期待JSON,XML或HTML等...... jQuery的默认设置,试图找出它。$.ajax() documentation也有完整的描述。
$.ajax({
url: "http://localhost/weltenbummler/Weltenbummler1/Weltenbummler1/app/login.php?username=" + name + "&password=" + pass,
dataType: 'JSON',
type: 'GET',
success: function (d) {
console.log(JSON.parse(d.message))
},
});
答案 3 :(得分:-1)
echo json_encode($response, true);