AJAX/JSONを介してJavaScriptに転送されるPHP変数に関する質問があります。AJAXがページの読み込み時にJavascript変数を更新しない
var ChronoIDを、PHPコードからAJAX getから取得した値で更新するようにします。 AJAXで正常に動作していても、は未定義に戻り、後で使用するために変数を更新しません。
私は間違って何をしていますか、JavaScript変数にPHP変数を転送する最良の方法は何ですか?
- scripts.js
$(document).ready(function() {
var jsonGet;
var chronoID;
var timeworked;
var startAt;
$.ajax({
type: "GET",
url: "detectopencrono.php",
dataType: "json",
success: function (response) {
jsonGet = response;
console.log(jsonGet); // JSON Array (works)
var arr = $.map(jsonGet, function (el) {
return el;
});
console.log(arr); // JavaScript Array (after parse, works)
chronoID = arr[0]; // (works)
$("#chrono" + chronoID + "").show(200);
console.log(chronoID); // Works, shows value
}
});
console.log(chronoID); // Undefined (doesn't work)
});
- "AJAX" でdetectopencrono.php
<?php
include("connection.php");
session_start();
/*if (isset($_POST['projectname'], $_POST['startyear'], $_POST['startmonth'], $_POST['startday'], $_POST['deadyear'], $_POST['deadmonth'], $_POST['deadday'], $_POST['lider'], $_POST['hours'], $_POST['budget']))
{*/
$iduser = $_SESSION['ID'];
if(isset($_SESSION['gbsn']))
{
$wasopenresult = mysqli_query($mysqli, "SELECT ID, IsGbsn FROM subtask WHERE Crono='Y' AND IsGbsn='Y' AND IDUser='$iduser'")
or die("Não foi possivel executar o pedido.");
}
else
{
$wasopenresult = mysqli_query($mysqli, "SELECT ID, IsGbsn FROM subtask WHERE Crono='Y' AND IsGbsn='N' AND IDUser='$iduser'")
or die("Não foi possivel executar o pedido.");
}
if(mysqli_num_rows($wasopenresult)==1)
{
$rowwasopen = mysqli_fetch_assoc($wasopenresult);
$result1 = $rowwasopen['ID'];
$result2 = $rowwasopen['IsGbsn'];
echo json_encode(array('userid' => $result1,'gbsn'=> $result2));
header('Content-Type: application/json');
}
?>
[ブラウザのデベロッパーツールでAJAX要求/応答を監視しましたか?プロジェクトにjQueryライブラリを含めましたか?エラーが報告されていますか?あなたはこれをWebサーバーで実行していますか?](http://jayblanchard.net/basics_of_jquery_ajax.html) –
[Little Bobby](http://bobby-tables.com/)は*** [あなたのスクリプトはSQLインジェクション攻撃のリスク。](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)*** [prepared]について学ぶ(http:// en .wikipedia.org/wiki/Prepared_statement)の[MySQLi]に関する記述(http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)を参照してください。 [文字列をエスケープする](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)でも安全ではありません! –
'success'はAJAXが完了した後にコールバックされるコールバックなので、' chronoID'はまだ定義されていませんが、2番目の 'console.log()'がコールバックが完了する前に実際に実行されていると思います。 'chronoID'で何かしたいのなら、それをあなたの成功関数の中で行います。 – perfect5th