PHP автоматически конвертирует числа в строки? - PullRequest
3 голосов
/ 01 ноября 2011

Я использую dojo и ajax для отправки метки времени в PHP, который выполняет проверку базы данных, а затем возвращает метку времени для целей отладки. Когда я отправляю эту отметку времени, это число, когда оно возвращается, это строка. Есть ли конкретная причина для этого? Что я должен сделать, чтобы избежать этого (приведение к int в PHP, исправление через JSON или приведение к int в javascript)

Вот код Додзё

dojo.xhrGet({
 url: 'database/validateEmail.php',
 handleAs: "json",
 content: {
 email : 'George.Hearst@Pinkerton.dw',
 time: 0
 },
 load: function(args) {/*SEE BELOW*/}
});

Вот скрипт PHP

<?php

/**
 ** connect to the MySQL database and store the return value in $con
 *
 */
$con = mysql_pconnect("localhost:port", "username", "password");

/**
 ** handle exceptions if we could not connect to the database
 *
 */
if (!$con) {
    die('Could not connect: ' . mysql_error());
}

/**
 ** Create table query
 *
 */
mysql_select_db("portal", $con);

/**
 ** Get user entered e-mail
 *
 */
$emailQuerry = mysql_num_rows(mysql_query("SELECT EMAIL FROM user WHERE EMAIL='" . $_GET["email"] . "'")) == 1;

/**
 ** Whether successful or not, we will be returning the time stampe (this is used to determine whether there were any changes between the time a request
 ** was sent, and when this response was returned.
 *
 */
 $result['time'] = $_GET["time"];

/**
 ** Currently only checks to see if the two values were provided. Later, will have to check against passwords
 *
 */
if ($emailQuerry) {
    $result['valid'] = true;
}
else {
    $result['valid'] = false;
}

echo json_encode($result);
?>

И, наконец, функция загрузки оставлена ​​пустой

load: function(args) {
 console.log(localArgs.time + ' v ' + args.time);
 console.log(localArgs.time === args.time);
 console.log(localArgs.time == args.time);
}

Выход которого

0 v 0
false
true

Ответы [ 3 ]

3 голосов
/ 01 ноября 2011

Вы можете использовать json_encode () для вывода ваших чисел из PHP (посткодирование) с опцией JSON_NUMERIC_CHECK .

3 голосов
/ 01 ноября 2011

json_encode кодирует все переменные в виде строки.

Так что JavaScript увидит его как строку.

Так что в javascript вы могли бы использовать parseInt(...)

1 голос
/ 01 ноября 2011

Чтобы отправить целое число как целое, достаточно просто - предоставьте json_encode с одним! Поместите '(int)' вокруг всего, что вы хотите конвертировать.

Вот пример:

echo json_encode(array(1, 2, 3));

Выход:

[1,2,3]


И еще:

$a = '123';
echo json_encode(array($a, (int) $a));

Выход:

["123",123]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...