将当前页面的 php 变量传递给 XMLHttpRequest2(即 $user_id)
Posted
技术标签:
【中文标题】将当前页面的 php 变量传递给 XMLHttpRequest2(即 $user_id)【英文标题】:Pass a current page's php variable through to XMLHttpRequest2 (i.e. $user_id) 【发布时间】:2016-11-25 13:59:41 【问题描述】:我试图弄清楚当前页面的 php $var 是否可以传递给 XMLHttpRequest2。正在调用的文件位于 /assets/js 目录中的视图(当前 php 页面所在的位置)文件夹之外。我也在使用 CodeIgniter。尝试传递 $user_id 以在 XMLHttpRequest2 请求文件中的 SQL 查询中使用。
publication_call.php(当前文件)
<form>
<input type="hidden" id="someid" value="<?= $idz ?>"/>
<?php
echo form_label('Validation: (Enter Publication keywords, Matches will appear in Dropdown > )');
echo form_label('Matching<br>Publications:');
?>
<select name="matched_pub" id="matched_pub"></select>
</form>
<script>
jQuery(function($)
//still want to bind the change event
$('#matched_pub').bind('change', function()
$('#title').val($('#matched_pub option:selected').text());
);
$('#validation').keyup(function()
showKeywords( $('#validation').val() );
document.getElementById('matched_pub').style.display='block';
);
);
</script>
<script>
function showKeywords(str)
if (document.getElementById("matched_pub"))
if (str.length==0)
document.getElementById("matched_pub").innerhtml="";
document.getElementById("matched_pub").innerHTML=xmlhttp2.responseText;
return;
if (window.XMLHttpRequest)
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp2=new XMLHttpRequest();
else
// code for IE6, IE5
xmlhttp2=new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp2.onreadystatechange=function()
if (xmlhttp2.readyState==4 && xmlhttp2.status==200)
document.getElementById("matched_pub").innerHTML=xmlhttp2.responseText;
xmlhttp2.open("GET","/assets/keywordsearch.php?b="+str,true);
xmlhttp2.send();
</script>
searchwords.php(请求的/外部文件)
<?php
$user = 'root';
$pass = 'root';
$db = 'hey_there';
$host = 'localhost';
$conn = mysql_connect($host, $user, $pass);
$db_selected = mysql_select_db($db, $conn);
//trying to display special chars
mysql_query("set names 'utf8'");
if(!$db_selected)
echo 'broke';
//echo 'db connected';
$q = $_GET["b"];
//explode and parse $q into all the fragments separated by spaces and do full text search +word1 +word2 +word3, this will ignore HTML tags as it ignores word order, will also solve the middle initial problem [db setup is not compatible with full text search, but can do likes per word, less efficient, but how it must be done]
$queryWords = explode(' ', $q);
//for services query, explode the query into words and search for each separately
$query = "SELECT DISTINCT(pub_title)
FROM teacher_publications
JOIN users ON teacher_publications.user_id = users.id
WHERE keywords IS NOT NULL
AND pub_title IS NOT NULL
AND teacher_publications.user_id = 103 <-- $var will go here
";
$queryServicesLoop = '';
$queryServicesEnd = ' ORDER BY pub_title ASC';
//loop through all words in string
foreach($queryWords as $queryWord)
$queryServicesLoop .= " AND (keywords LIKE '%$queryWord%')";
$queryServices = $queryServices.$queryServicesLoop;
$queryServices = $queryServices.$queryServicesEnd;
$resultServices = mysql_query($queryServices);
$services ='';
if(mysql_num_rows($resultServices) > 0)
while($rowServices = mysql_fetch_assoc($resultServices))
$services .= '<option value="' . $rowServices['pub_title'] . '">' . $rowServices['pub_title'] . '</option>';
if( mysql_num_rows($resultServices) == 0 )
echo '<option value="">Your search failed to find any matching results.</option>';
else
echo '' . $services . '';
/* =============================== 编辑代码 =============================== */
publication_call.php(当前文件)
<input type="hidden" id="someid" value="<?= $user_id ?>"/>
<script>
function showKeywords(str)
if (document.getElementById("matched_pub"))
if (str.length==0)
document.getElementById("someid");
document.getElementById("matched_pub").innerHTML="";
document.getElementById("matched_pub").innerHTML=xmlhttp2.responseText;
return;
if (window.XMLHttpRequest)
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp2=new XMLHttpRequest();
else
// code for IE6, IE5
xmlhttp2=new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp2.onreadystatechange=function()
if (xmlhttp2.readyState==4 && xmlhttp2.status==200)
document.getElementById("matched_pub").innerHTML=xmlhttp2.responseText;
xmlhttp2.open("GET","/assets/keywordsearch.php?b="+str+"&user_id="+document.getElementById('someid'), true);
// xmlhttp2.open("GET","/assets/keywordsearch.php?b="+str,true);
xmlhttp2.send();
</script>
searchwords.php(请求的/外部文件)
$usr = $_GET["user_id"];
$query = "SELECT DISTINCT(pub_title)
FROM teacher_publications
JOIN users ON teacher_publications.user_id = users.id
WHERE keywords IS NOT NULL
AND pub_title IS NOT NULL
AND teacher_publications.user_id = ".$usr."
";
【问题讨论】:
php 在服务器上运行,javascript 在客户端上运行。 php 不能发出 ajax 请求,它只能响应它们。你可以让 php 在页面创建时嵌入任何你想要的东西,或者让 php 响应 ajax 调用,但你不能使用 php 来执行 xmlhttprequest(又名 ajax)。 【参考方案1】:您可以将$user_id
放在隐藏的输入字段中,并使用 Javascript 读取它的值以在您的 Ajax 请求中使用
你可以这样做:
<input type="hidden" id="someid" value="<?= $user_id ?>
然后在你完成之后,你可以通过这样做来获得价值:
document.getElementById('someid');
使用纯 Javascript 或 $('#someid').value();
如果你使用 jquery
这将为您获取用户 ID 值,然后您可以在请求中使用该值。
像这样:
xmlhttp2.open("GET","/assets/keywordsearch.php?b="+str+"&user_id="+document.getElementById('someid').value, true);
用上面的替换你当前的 xmlhttp2.open
现在您可以访问请求文件中$_GET['user_id']
中用户ID 的值。
【讨论】:
你有示例代码吗? JS是我的弱点 谢谢! 但是我将如何在请求/外部文件的 SQL 语句中使用该 var ('someid') 呢? $query = "SELECT DISTINCT(pub_title) FROM teacher_publications 在teacher_publications.user_id = users.id 上加入用户,其中关键字不为空且pub_title 不为空且teacher_publications.user_id = ".$someid." "; 不是请求,而是使用 POST 方法进行 Ajax 调用。将参数用户 ID 传递给它,然后在 php 文件中您将可以访问 $_POST['user_id'] 你能告诉我吗,因为现在我很困惑。我正在执行 GET,但我认为您无法使用 POST 获取文件。我看不到 var 会去哪里。流程如下: 1. XmlHttpRequest 在 keyup 上获取外部文件,2. 外部文件运行查询并返回结果。该 var 需要在该查询中使用。 代码已添加,先生。以上是关于将当前页面的 php 变量传递给 XMLHttpRequest2(即 $user_id)的主要内容,如果未能解决你的问题,请参考以下文章
PHP 通过 SQL 查询中的 Href 链接将变量传递给弹出页面
Javascript将选项传递给变量并使用php保存到txt文件