2009-12-25 2 views

ответ

47

Вы не можете получить значение POST-переменных с помощью Javascript, хотя вы можете вставить его в документ при обработке запроса на сервере.

<script type="text/javascript"> 
    window.some_variable = '<?=$_POST['some_value']?>'; // That's for a string 
</script> 

GET переменные доступны через window.location.href, и некоторые структуры даже methods готовы разобрать их.

+10

Вместо того, чтобы прямо писать значение POST, вы можете использовать 'json_encode' –

+0

@ Ken Keenan: вы правы! А также вы можете сделать некоторые проверки перед этим. Я просто пытался показать свою мысль. –

+3

Не делать какой-либо кодировки или проверки означает, что написанный код [уязвим для XSS] (https://www.owasp.org/index.php/XSS). – Quentin

16

Вы можете получить только аргументы URI с помощью JavaScript.

// get query arguments 
var $_GET = {}, 
    args = location.search.substr(1).split(/&/); 
for (var i=0; i<args.length; ++i) { 
    var tmp = args[i].split(/=/); 
    if (tmp[0] != "") { 
     $_GET[decodeURIComponent(tmp[0])] = decodeURIComponent(tmp.slice(1).join("").replace("+", " ")); 
    } 
} 
-1

Когда я был вопрос я сохраненное значение в скрытый ввод:

в HTML теле:

<body> 
    <?php 
    if (isset($_POST['Id'])){ 
     $fid= $_POST['Id']; 
    } 
    ?> 

... затем поместить скрытый вход на странице и написать значение $ FID с PHP эхо

<input type=hidden id ="fid" name=fid value="<?php echo $fid ?>"> 

затем в $ (документ) .ready (функция() {

var postId=document.getElementById("fid").value; 

поэтому я получил свой скрытый параметр url в php js.

+0

Это небезопасно. Это позволяет любому вставлять произвольный HTML в ваше приложение (они могут отправлять '' 'и выходить из атрибута) –

0

С небольшим количеством php очень просто.

HTML часть:

<input type="text" name="some_name">

JavaScript

<script type="text/javascript"> 
    some_variable = "<?php echo $_POST['some_name']?>"; 
</script> 
+0

Это совершенно небезопасно. Если кто-то отправляет что-то, содержащее' '', то они могут следовать за ним с помощью произвольного JavaScript. –

+0

Также обратите внимание, что escape-кода '' 'недостаточно, вам нужно также защищать от''. Рекомендуется использовать 'json_encode' (который теперь ускользает от обратной косой черты) –

0
// Captura datos usando metodo GET en la url colocar index.html?hola=chao 
const $_GET = {}; 
const args = location.search.substr(1).split(/&/); 
for (let i=0; i<args.length; ++i) { 
    const tmp = args[i].split(/=/); 
    if (tmp[0] != "") { 
     $_GET[decodeURIComponent(tmp[0])] = decodeURIComponent(tmp.slice(1).join("").replace("+", " ")); 
     console.log(`>>${$_GET['hola']}`); 
    }//::END if 
}//::END for 
+0

Для этого может понадобиться пояснение. –

0

/** 
 
* getGET: [Funcion que captura las variables pasados por GET] 
 
* @Implementacion [pagina.html?id=10&pos=3] 
 
* @param {[const ]} loc   [capturamos la url] 
 
* @return {[array]} get [Devuelve un array de clave=>valor] 
 
*/ 
 
const getGET =() => { 
 
    const loc = document.location.href; 
 

 
      // si existe el interrogante 
 
      if(loc.indexOf('?')>0){ 
 
      // cogemos la parte de la url que hay despues del interrogante 
 
      const getString = loc.split('?')[1]; 
 
      // obtenemos un array con cada clave=valor 
 
      const GET = getString.split('&'); 
 
      const get = {}; 
 

 
      // recorremos todo el array de valores 
 
      for(let i = 0, l = GET.length; i < l; i++){ 
 
       const tmp = GET[i].split('='); 
 
       get[tmp[0]] = unescape(decodeURI(tmp[1])); 
 
      }//::END for 
 
      return get; 
 
     }//::END if 
 
}//::END getGET 
 

 
/** 
 
* [DOMContentLoaded] 
 
* @param {[const]} valores [Cogemos los valores pasados por get] 
 
* @return {[document.write]}  
 
*/ 
 
document.addEventListener('DOMContentLoaded',() => { 
 
    const valores=getGET(); 
 

 
    if(valores){ 
 
      // hacemos un bucle para pasar por cada indice del array de valores 
 
      for(const index in valores){ 
 
       document.write(`<br>clave: ${index} - valor: ${valores[index]}`); 
 
      }//::END for 
 
     }else{ 
 
      // no se ha recibido ningun parametro por GET 
 
      document.write("<br>No se ha recibido ningún parámetro"); 
 
     }//::END if 
 
});//::END DOMContentLoaded

-1

Вот мой отве er для этой заданной строки returnURL, которая равна http://host.com/?param1=abc&param2=cde. Это довольно просто, поскольку я начинаю с JavaScript (это на самом деле является частью моей первой программы в JS) и упрощает понимание, а не сложно.

Примечания

  • Нет здравомыслие не проверка значений
  • Просто выводит на консоль - вы хотите, чтобы сохранить их в массиве или что-то
  • это только для GET, а не POST

    var paramindex = returnURL.indexOf('?'); 
    if (paramindex > 0) { 
        var paramstring = returnURL.split('?')[1]; 
        while (paramindex > 0) { 
         paramindex = paramstring.indexOf('='); 
         if (paramindex > 0) { 
          var parkey = paramstring.substr(0,paramindex); 
          console.log(parkey) 
          paramstring = paramstring.substr(paramindex+1) // +1 to strip out the = 
         } 
         paramindex = paramstring.indexOf('&'); 
         if (paramindex > 0) { 
          var parvalue = paramstring.substr(0,paramindex); 
          console.log(parvalue) 
          paramstring = paramstring.substr(paramindex+1) // +1 to strip out the & 
         } else { // we're at the end of the URL 
          var parvalue = paramstring 
          console.log(parvalue) 
          break; 
         } 
        } 
    } 
    
Смежные вопросы