как использовать ответ JSON с Ajax - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь использовать ответ JSON от моего Ajax-запроса, но независимо от того, что я пытаюсь, я не могу заставить это работать, поэтому мне нужна помощь, пожалуйста. Мой код для запроса AJAX ниже

<html>

<head>
	<title>QuizMaster</title>
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<script src="jquery-3.1.0.min.js"></script>
<script>
	function player(x){
		var player = x;
		$.ajax({
			url:"gameDb.php",
			type: "GET",
			data: {"request":player},
			dataType: "json",
			success: function(data){
				console.log(data);
				var obj = JSON.parse(data);
				console.log(obj[1].player1);
				//console.log(data['player1']);//undefined
				//console.log(data[player[0]]);
			}
		});
	}

	$(document).ready(function(){
		$('#button input').click(function(){
			var x = this.id;
			player(x);
		});
	});
</script>

С этим я получаю ответ

`   player1.php:18 Uncaught ReferenceError: data is not defined
       at Object.success (player1.php:18)
       at i (VM160 jquery-3.1.0.min.js:2)
       at Object.fireWith [as resolveWith] (VM160 jquery-3.1.0.min.js:2)
       at A (VM160 jquery-3.1.0.min.js:4)
       at XMLHttpRequest.<anonymous> (VM160 jquery-3.1.0.min.js:4)`

Мой JSON-ответ без сценария успеха следующий

    `{1: {…}}1: 0: "1"1: "1"2: "0"id: "1"player1: "1"player2: "0"__proto__: Object__proto__: Object`

Если я изменю успех с

`var obj = $.parseJSON(data); console.log(data[0].player1);` 

к этому

`console.log(data['player1']);` i get undefined

и если я изменю его на

console.log(data[player[0]]);

Я тоже получаю неопределенный

Что я делаю не так? я хотел бы иметь возможность использовать ответ в моем коде

Это скрипт PHP, если он помогает

<?php
$request = $_GET['request'];
try
{
	$pdo = new PDO('mysql:host=localhost; dbname=game', '***', '***');
}
catch (PDOException $e)
{
	echo 'Error: ' . $e->getMessage();
	exit();
}

if ($request == 'player1'){
	$player1 = 1;
	$player2 = 0;
}
if ($request == 'player2'){
	$player1 = 0;
	$player2 = 1;
}

$id = 1;
$sql = "UPDATE game1 SET player1 = :p11, player2 = :p12 WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':id', $id);
$stmt->bindParam(':p11', $player1);
$stmt->bindParam(':p12', $player2);
$stmt->execute();

$sql = 'SELECT * FROM game1';
$stmt = $pdo->prepare($sql);
$stmt->execute();

while ($row = $stmt->fetch())
	{
	$x++;
	$items[$x] = $row;
	}
echo json_encode ($items);
$conn = null;
?>

EDITED

Если я изменю скрипт php на следующий

while ($row = $stmt->fetch())
	{
	
	//$x++;
	//$items[$x] = $row;
	$player1 = $row['player1'];
	$player2 = $row['player2'];
	}
	//$item[{"plater1":"1", "player2":"2"}];
//echo "<pre>";print_r(json_encode($items));die;
$items['player1'] = $player1;
$items['player2'] = $player2;
echo json_encode ($items);

я получаю следующее при переходе на php код

{"player1":"0","player2":"0"}

если я изменю скрипт игрока на следующий

			success: function(data){
				console.log(data);
				var obj = parseInt(data.player1);
				console.log(obj);
			}

Я получаю значение игрока 1, которое является правильным

но если я попробую

    var obj = JSON.parse(data);

или

    var obj = $.parseJSON(data);

Я все еще получаю синтаксическую ошибку для обоих. Не знаю почему, но я могу получить работу около

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

У вас уже есть анализ json с dataType: "json", поэтому вам не нужно делать это снова с $.parseJSON или JSON.parse, ошибка в том, что вы пытаетесь проанализировать не строку, а объект. Попробуйте это:

function player(x){
        var player = x;
        $.ajax({
            url:"gameDb.php",
            type: "GET",
            data: {"request":player},
            dataType: "json",//here you have the parse
            success: function(data){
                //var obj = $.parseJSON(data); you don't need to parse as json
                console.log(data[1].player1);//or console.log(data.player1); it depends of the implementation. it should be 0 
            }
        });
    }

Как результат, приведенный в комментариях, у вас есть такая структура:

var str = '{"1":{"id":"1","0":"1","player1":"0","1":"0","player2":"0","2":"0"}}';

var obj = JSON.parse(str);

console.log(obj)

console.log(obj[1].player1);

Это данные:

{
  "1": {
    "0": "1",
    "1": "0",
    "2": "0",
    "id": "1",
    "player1": "0",
    "player2": "0"
  }

нет data[0]

0 голосов
/ 29 июня 2018

Функция $.parseJSON() вернет JSON как объект JavaScript и не изменит исходный JSON. Вам нужно использовать возвращаемое значение из функции:

function player(x){
    var player = x;
    $.ajax({
        url:"gameDb.php",
        type: "GET",
        data: {"request":player},
        dataType: "json",
        success: function(data){
            var obj = $.parseJSON(data);
            console.log(obj[0].player1); // switched data with obj
        }
    });
}

Как вы можете видеть в документации jQuery, $.parseJSON() устарела, и вместо нее следует JSON.parse():

success: function(data){
    var obj = JSON.parse(data);
    console.log(obj[0].player1); // switched data with obj
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...