PHP에서 JavaScript로 변수 가져 오기 [duplicate]
PHPPHP에서 JavaScript로 변수 가져 오기 [duplicate]
자바 스크립트에서 PHP 변수를 사용하고 싶습니다. 그게 어떻게 가능해?
해결법
-
==============================
1.페이지가 생성되는 동안 자바 스크립트에 PHP 변수를 인쇄 할 수 있습니다.
페이지가 생성되는 동안 자바 스크립트에 PHP 변수를 인쇄 할 수 있습니다.
<script type="text/javascript"> var MyJSStringVar = "<?php Print($MyPHPStringVar); ?>"; var MyJSNumVar = <?php Print($MyPHPNumVar); ?>; </script>
물론 이것은 단순 변수가 아니라 객체를위한 것입니다.
-
==============================
2.PHP 변수를 PHP로 생성하여 JavaScript에 전달할 수 있습니다.
PHP 변수를 PHP로 생성하여 JavaScript에 전달할 수 있습니다.
<?php $someVar = 1; ?> <script type="text/javascript"> var javaScriptVar = "<?php echo $someVar; ?>"; </script>
-
==============================
3.가장 쉬운 방법은 웹 페이지에 jQuery 자바 스크립트 라이브러리를 포함시킨 다음 JSON을 형식 사이에서 데이터를 전달하는 데 사용하는 것입니다.
가장 쉬운 방법은 웹 페이지에 jQuery 자바 스크립트 라이브러리를 포함시킨 다음 JSON을 형식 사이에서 데이터를 전달하는 데 사용하는 것입니다.
HTML 페이지에서 다음과 같이 PHP 스크립트의 데이터를 요청할 수 있습니다.
$.getJSON('http://foo/bar.php', {'num1': 12, 'num2': 27}, function(e) { alert('Result from PHP: ' + e.result); });
bar.php에서 다음과 같이 할 수 있습니다 :
$num1 = $_GET['num1']; $num2 = $_GET['num2']; echo json_encode(array("result" => $num1 * $num2));
이것은 보통 AJAX라고 불리는 것이며, 웹 페이지에 더 많은 것을 제공하는 것이 유용합니다. 동적 및 데스크탑과 같은 느낌 (전체 페이지를 새로 고침 할 필요가 없습니다. PHP 포함).
다른 기술은 더 간단합니다. 다른 사람들이 제안했듯이, 당신은 단순히 PHP 스크립트의 변수 데이터 :
$foo = 123; echo "<script type=\"text/javascript\">\n"; echo "var foo = ${foo};\n"; echo "alert('value is:' + foo);\n"; echo "</script>\n";
요즘 대부분의 웹 페이지는이 둘의 조합을 사용합니다.
-
==============================
4.그것은 자바 스크립트에서 사용하고자하는 PHP 변수의 유형에 달려 있습니다. 예를 들어 클래스 메서드가있는 전체 PHP 객체는 Javascript에서 사용할 수 없습니다. 그러나 내장 PHP JSON (JavaScript Object Notation) 함수를 사용하여 간단한 PHP 변수를 JSON 표현으로 변환 할 수 있습니다. 자세한 내용은 다음 링크를 참조하십시오.
그것은 자바 스크립트에서 사용하고자하는 PHP 변수의 유형에 달려 있습니다. 예를 들어 클래스 메서드가있는 전체 PHP 객체는 Javascript에서 사용할 수 없습니다. 그러나 내장 PHP JSON (JavaScript Object Notation) 함수를 사용하여 간단한 PHP 변수를 JSON 표현으로 변환 할 수 있습니다. 자세한 내용은 다음 링크를 참조하십시오.
PHP 변수의 JSON 표현을 생성 한 다음 페이지가로드 될 때 Javascript 코드에 인쇄 할 수 있습니다. 예 :
<script type="text/javascript"> var foo = <?php echo json_encode($bar); ?>; </script>
-
==============================
5.
<?php $j=1; ?> <script> var i = "<?php echo $j; ?>"; //Do something </script> <?php echo $j; ?>
이것은 PHP 변수를 Ajax없이 자바 스크립트로 전달하는 가장 쉬운 방법입니다.
다음과 같이 사용할 수도 있습니다.
var i = "<?php echo json_encode($j); ?>";
이것은 더 안전하거나 더 안전하다고 말했습니다. 나는 생각한다.
-
==============================
6.업데이트 :이 답변을 완전히 다시 작성했습니다. 오래된 코드는 여전히 바닥에 있지만 권장하지는 않습니다.
업데이트 :이 답변을 완전히 다시 작성했습니다. 오래된 코드는 여전히 바닥에 있지만 권장하지는 않습니다.
GET 변수에 액세스 할 수있는 두 가지 주요 방법은 다음과 같습니다.
PHP를 사용하면 다음과 같은 "템플릿"을 만들 수 있습니다.
<script type="text/javascript"> var $_GET = JSON.parse("<?php echo json_encode($_GET); ?>"); </script>
그러나, 나는 여기 언어의 혼합이 조잡하다고 생각하고 가능하면 피해야한다. 어쨌든 PHP와 자바 스크립트간에 데이터를 섞어 야 할 이유가 없다고 생각합니다.
그것은 정말로 이것으로 귀결됩니다.
여기서 우리가 $ _GET에 대해 이야기하고 있기 때문에 (또는 적어도 원래의 답변을 작성했을 때라고 가정했을 때) JavaScript를 통해 가져와야합니다.
원래 답에서는 쿼리 문자열을 가져 오는 두 가지 방법이 있었지만 너무 복잡하고 오류가 발생하기 쉽습니다. 그것들은 이제이 대답의 맨 아래에 있습니다.
어쨌든, 나는 쿼리 문자열 (실제로 객체 생성자, MDN의 OOP 기사에서 관련 섹션 참조)을 얻기위한 멋진 작은 "클래스"를 설계했습니다.
function QuerystringTable(_url){ // private var url = _url, table = {}; function buildTable(){ getQuerystring().split('&').filter(validatePair).map(parsePair); } function parsePair(pair){ var splitPair = pair.split('='), key = decodeURIComponent(splitPair[0]), value = decodeURIComponent(splitPair[1]); table[key] = value; } function validatePair(pair){ var splitPair = pair.split('='); return !!splitPair[0] && !!splitPair[1]; } function validateUrl(){ if(typeof url !== "string"){ throw "QuerystringTable() :: <string url>: expected string, got " + typeof url; } if(url == ""){ throw "QuerystringTable() :: Empty string given for argument <string url>"; } } // public function getKeys(){ return Object.keys(table); } function getQuerystring(){ var string; validateUrl(); string = url.split('?')[1]; if(!string){ string = url; } return string; } function getValue(key){ var match = table[key] || null; if(!match){ return "undefined"; } return match; } buildTable(); this.getKeys = getKeys; this.getQuerystring = getQuerystring; this.getValue = getValue; }
JS 휘티 d 혀라도
function main () { var imaginaryUrl = "http://example.com/webapp/?search=how%20to%20use%20Google&the_answer=42", qs = 새로운 QuerystringTable (imaginaryUrl); urlbox.innerHTML = "url :"+ imaginaryUrl; logButton ( "qs.getKeys ()", qs.getKeys () .map (화살촉) .join ( "\ n") ); logButton ( 'qs.getValue ( "search")', qs.getValue ( "search") .arrowify () ); logButton ( 'qs.getValue ( "the_answer")', qs.getValue ( "the_answer") .arrowify () ); logButton ( "qs.getQuerystring ()", qs.getQueryystring () .arrowify () ); } 함수 화살 (str) { return "->"+ str; } String.prototype.arrowify = function () { return arrowify (this); } 기능 로그 (msg) { txt.value + = msg + '\ n'; txt.scrollTop = txt.scrollHeight; } 함수 logButton (이름, 출력) { var el = document.createElement ( "button"); el.innerHTML = name; el.onclick = function () { 로그 (이름); 로그 (출력); log ( "- - -"); } buttonContainer.appendChild (el); } function QuerystringTable (_url) { // private var url = _url, 표 = {}; 함수 buildTable () { getQuerystring (). split ( '&'). filter (validatePair) .map (parsePair); } 함수 parsePair (쌍) { var splitPair = pair.split ( '='), key = decodeURIComponent (splitPair [0]), 값 = decodeURIComponent (splitPair [1]); 테이블 [키] = 값; } function validatePair (쌍) { var splitPair = pair.split ( '='); return !! splitPair [0] && !! splitPair [1]; } function validateUrl () { if (typeof url! == "string") { throw "QuerystringTable () ::
: 예상 문자열,"+ typeof url; } if (url == "") { throw "QuerystringTable () :: 빈 문자열 "; } } // 공공의 function getKeys () { return Object.keys (table); } function getQuerystring () { var 문자열; validateUrl (); string = url.split ( '?') [1]; if (! string) { string = url; } 반환 문자열; } 함수 getValue (key) { var match = table [key] || 없는; if (! match) { return "undefined"; } 리턴 매치; } buildTable (); this.getKeys = getKeys; this.getQuerystring = getQuerystring; this.getValue = getValue; } 본관(); #urlbox { 너비 : 100 %; 패딩 : 5px; 여백 : 10px 자동; 글꼴 : 12px 모노 스페이스; 배경 : #fff; 색상 : # 000; } #txt { 너비 : 100 %; 높이 : 200px; 패딩 : 5px; 여백 : 10px 자동; 크기 조정 : 없음; 국경 : 없음; 배경 : #fff; 색상 : # 000; displaY : 블록; } 단추{ 패딩 : 5px; 여백 : 10px; 너비 : 200px; 배경 : #eee; 색상 : # 000; 국경 : 1 픽셀 고체 #ccc; 디스플레이 : 블록; } 버튼 : hover { 배경 : #fff; 커서 : 포인터; } p>