ajax无法从php

时间:2017-08-15 04:42:08

标签: javascript php jquery json ajax

我在从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

还有其他建议吗?谢谢!

4 个答案:

答案 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);