Допустим, у меня есть общедоступная HTML-страница в Интернете со следующим содержанием:
<html>
<head>
<script>
var variableA = {
name: "A"};
variableA.id = 1;
</script>
</head>
<body>
...
</body>
</html>
Есть ли способ получить значение переменной variableA
с php?
Что-то вроде этого:
$html = file_get_contents($myUrl);
$variableA = magicMethodIamLookingFor("variableA");
print_r($variableA);
С этим результатом:
Array(
"name" => "A",
"id" => 1
)
Я мог бы сделать это только с помощью регулярных выражений и json_decode
(похоже как Как получить переменную Javascript со страницы HTML?) но проблема в том, что это не просто один JSON, но есть также переменные изменения, такие как variableA.id = 1;
Примечание. При использовании простых сценариев PHP доступ к JS-переменным невозможен.
Интересное требование. Ниже идет решение. Рассмотрим случай, когда имя переменной передается в URL. Пусть имя страницы будет «index.php». URL для просмотра выглядит следующим образом: localhost / index.php? VarName = variableA, где varName — это параметр запроса, который принимает имя переменной в качестве значения. Мы также можем передавать значения через запятую, немного подправляя код. Но это не считается сейчас.
Изложение шагов ниже
После вызова ajax есть еще DOM, где мы напечатаем имя / значение & удалить запись из базы данных или файла после отображения того же.
Примечание: основной код находится в JS — см. Функцию getVarWithValue (переменная).
<html>
<body>
<?php
$varName = (isset($_GET['varName']) && trim($_GET['varName']) != "") ? $_GET['varName'] : 'variableA';
?>
<div style="display:none">
<?php
$html = file_get_contents('./url.php');
echo $html;
?>
<script>
//THIS IS THE CORE FUNCTION WHICH GETS THE VAR NAME & VALUE
function getVarWithValue(variable) {
var param = '';
for (var name in this) {
keyValue = [];
if (variable == name ) return param += name+'='+JSON.stringify(eval(name));
}
return false;
}
var http = new XMLHttpRequest();
http.open("POST", "setVariableValue.php", false); // 3rd argument makes sure that the call is NOT async.
http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http.onreadystatechange = function() {
if (http.readyState == 4 && http.status == 200) {
document.getElementById("varValue").innerHTML = http.responseText.toString();
}
};
http.send(getVarWithValue( '<?php echo $varName ?>' ));
</script>
</div>
<?php
//$varValue = getValuefromDB(); Get the saved value from DB or file
echo "The variable value of $varName is: ".$varValue;
// Write code to remove the row from DB or file
?>
</body>
url.php (Страница, с которой нам нужно захватить имя переменной & значение)
<html>
<head>
<script>
var variableA = { name: "A" };
variableA.id = 1;
var variableB = ["Stack", "Overflow"]
</script>
</head>
<body>
Some Text
</body>
</html>
setVariableValue.php
<?php
/**
* Write code for saving var name & value to DB or file
*/
Других решений пока нет …