在此函数之外创建一个值,以便稍后在 php 中使用

问题描述 投票:0回答:1

我试图将country_code var转到函数之外以便稍后在php.ini中使用。这里它的工作是在 div 中显示值。我遇到的问题是使 var 在函数之外可用,因此我可以将其转换为 php var,以便稍后在按下提交按钮后在 php 脚本中使用

<html>
    <head>
      <script type="text/javascript">
        var xhttp = new XMLHttpRequest();
        xhttp.onreadystatechange = function() {
          if (this.readyState == 4 && this.status == 200) {
            var country_code = this.responseText.replace(/(\r\n|\n|\r)/gm,"").split('loc=');
            
            
            document.getElementById("countrycode-container").innerHTML = country_code;
          }
        };
        //OPEN HTTP Request
        xhttp.open("GET", "https://www.cloudflare.com/cdn-cgi/trace", true);
        xhttp.send();
      </script>
    </head>
    <body>
        <br><br><br>
    <div id="countrycode-container"></div>
    <br><br><br>
    </body>
    </html>

但是我想通过从 javascript 的值创建一个 php var 来删除要在这样的 php 脚本中使用的 div

             var xhttp = new XMLHttpRequest();
           
              //start of function
                xhttp.onreadystatechange = function() {
                   if (this.readyState == 4 && this.status == 200) {
                    let country_code = this.responseText.replace(/(\r\n|\n|\r)/gm,"").split('loc=');
                    country_code = country_code[1].split('tls=');
                    country_code = country_code[0];
                    document.getElementById("countrycode-container").innerHTML = country_code;
                    console.log(country_code);//will work here
                
                  }
            
                  
                };
                //end of function
                
                
                //OPEN HTTP Request
                xhttp.open("GET", "https://www.cloudflare.com/cdn-cgi/trace", true);
                xhttp.send();
        
 console.log(country_code);//need it to work here so i can take the value and turn it into php var
        
        // somehow convert from javascript var to php var
        //javascript var country_code
        //php var $country
        
        $country=country_code;
      
   
    
    
                if (isset($_POST['submit'])){
         code to check country code and do somin if match US,CA
        else{
         if empty or not US or CA do this
        }
        }
javascript php ajax xml
1个回答
0
投票

您可以通过在表单中添加隐藏输入来实现您想要的目的:

<form id="myForm" method="post" action="path/to/script.php">
   <input type="hidden" name="country_code" id="country_code" value=""/>
   <!-- ... -->
   <input type="submit" name="submit" id="submitButtonElement" disabled>Submit</button>
</form>

然后稍微改变一下你的 JavaScript:

var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
  if (this.readyState == 4 && this.status == 200) {
    var country_code = this.responseText.replace(/(\r\n|\n|\r)/gm,"").split('loc=');
    
    document.getElementById("countrycode-container").innerHTML = country_code;
    
    // EDIT: change the hidden input value
    document.getElementById("country_code").value = country_code;
    
    // Enable the form submission...
    document.getElementById("submitButtonElement").disabled = false;
  }
};
//OPEN HTTP Request
xhttp.open("GET", "https://www.cloudflare.com/cdn-cgi/trace", true);
xhttp.send();

然后稍微更改一下你的 PHP 脚本:

if ( isset($_POST['submit']) )
{
  $country = $_POST['country_code'];
  
  // ...
  
  switch ( $country )
  {
    case 'US':
    case 'CA':
    {
      // If US or CA...
      break;
    }
    
    // Add more country options here...
    /*
    case 'BR':
    {
      // If BR...
      break;
    }
    */
    
    default:
    {
      // If none of the above...
      break;
    }
  }
  
  // ...
}

页面将从跟踪器请求国家/地区,然后将值存储在表单中,通过 POST 方法发送,以便在 PHP 中可用。您应该禁用提交按钮,直到设置国家/地区变量。

这应该很管用。但请注意,只有接收 PHP 脚本才能访问

$_POST['country_code']
。生成表单的 PHP 脚本将无法访问该
$country
变量。但是,如果表单发送一次,您可以将值存储在会话变量中并在其他 PHP 脚本中恢复它。在后一种情况下,如果没有,您应该在会话中初始化国家/地区变量的默认值。

© www.soinside.com 2019 - 2024. All rights reserved.