- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试使用以下代码在 JS 函数中传递 php 表单值 --
<script type="text/javascript">
var titleV = document.getElementById("mrp-title-<?php echo $sequence ?>").value;
var commentV = document.getElementById("comment-<?php echo $sequence; ?>").value;
mrp_data_callbacks.push( function(index, data) {
data["<?php echo "htitle-" . $sequence ?>"] = titleV;
return data;
});
mrp_data_callbacks.push( function(index, data) {
data["<?php echo "comment-" . $sequence ?>"] = commentV;
return data;
});
</script>
为了得到这样的东西——
jQuery(document).ready(function() {
mrp_data_callbacks.push( function(index, data) {
data["hello"] = "world";
return data;
});
});
我直接这样试了--
mrp_data_callbacks.push( function(index, data) {
data["<?php echo "htitle-" . $sequence ?>"] = "<?php echo $htitle ?>";
return data;
});
我遇到的问题是这些值将不断更新并使用其他 js/ajax 文件上的脚本进行处理。因此,尝试直接在回调函数中回显 php 值是行不通的,我被告知其他地方 --
mixing PHP and JavaScript wont work (server side vs. client side). If htitle is updated, the values will not be updated. E.g. if htitle is "Hello" then the callback functions will always be: mrp_data_callbacks.push( function(index, data) { data["World"] = "World"; return data; }); The callback function is supposed to populate the values of the fields on the form to submit in the AJAX request. So you should use JavaScript not PHP to get the updated values from the HTML form.
Indeed, if you have an HTML form that the user fills in, then those modified values are not known by PHP until the form is submitted. PHP is only doing something when is passed to the server, not while the user is scrolling through the web page, filling in text. So in that case you should use javascript.
那么我怎样才能更新这些值并让脚本正常工作呢?
编辑
表单由插件生成,相关代码见下--- http://pastebin.com/RrjJqaFB -- 表单模板
http://pastebin.com/tp8Gxv8B -- Frontend.js - 这是完成 ajax 和定义回调函数的地方。
最佳答案
这将通过 AJAX 或 WebSocket 完成,使用 jQuery 你可以拥有类似的东西:
JS:
$('#username').on('change input', function(){
var username = $(this).val();
// Here you send - post - data to the .php file which deals with as
// a regular post request, some thing could be said for $.get as GET request
$.post('check_username.php', { username : username}, function(data){
if(data == 1){
// if data was 1, means the php found that username already in
// the database and echoed 1 back
$(this).addClass('errorMsg').text('This username is already taken.');
}
});
});
PHP:
if(isset($_POST['username'])){
$username = escape($_POST['username']);
$validate = new Validation();
$validation = $validate->checkUniq('users', 'username', $username);
$validation = ($validation == 0) ? 0 : 1;
echo $validation;
}
使用 jQuery 可以为您提供类似 $.ajax()
的功能, $.post()
, $.get()
, 后两个函数是快捷键。
但是,如果您期望有大量用户使用表单处理相同的数据,并且您不断地向所有用户发送和返回数据,这会给服务器带来很大的负载。
另一方面网站WebSocket通过在服务器和用户之间打开一个连接 channel 来工作,这个连接 channel 保持打开状态直到用户断开连接,不知何故这不会给服务器带来太大的负载,我还没有使用过 WebSocket 但我已经阅读了几篇文章并观看了YouTube 上的视频很少,其中大部分是关于创建实时聊天应用程序或多用户网络游戏。
对于 PHP,有 this PHP-Websockets ,还有这个 Ratchet library , 还有这个 WebSockets the UNIX way这不仅适用于 PHP。
更新 1:根据 OP 的评论,假设我们有一个类似的 - 但更简单 - 情况,以下文件都在同一文件级别:
data.txt: - 只是用来代替数据库做演示
title 0 , comment number 0
title 1 , comment number 1
title 2 , comment number 2
JS
$(document).ready(function() {
// for initializing we call fetchData function as soon as DOM is ready
// then re-call it every 10,000 milliseconds to update the input values with new
// fetched data , that could have been changed by other users.
fetchData();
setInterval(fetchData, 10000);
// on any button click we get the numeric index value, using this value
// to pick correspnding title and comment values, then send a POST
// request to foo.php and on response data we call updateHTML
$('.buttons').on('click', function(){
indexV = $(this).attr('id').replace('btn-', '');
titleV = $('#mrp-title-' + indexV).val();
commentV = $('#comment-' + indexV).val();
$.post('foo.php', { index : indexV, title:titleV, comment: commentV}, function(data){
if(data){
updateHTML(data);
}
});
});
// Making a get request to fetch fresh data
function fetchData(){
$.get('foo.php', function(data){
updateHTML(data);
});
}
// Update title and comment inputs values
function updateHTML(data){
var titleID, titleV, commentID, commentV, indexV, content;
// using jQuery parseJSON function to convert the JSON response
// to and array, then loop through this array to update inputs
// with new title and comment values.
content = $.parseJSON(data);
for(var i = 0; i < content.length; i++){
titleID = '#mrp-title-' + i;
titleV = content[i].title,
commentID = '#comment-' + i;
commentV = content[i].comment;
$(titleID).val(titleV);
$(commentID).val(commentV);
}
}
});
HTML:
<!-- this is usually generated with PHP -->
<div id="output">
<label for="mrp-title-0">Title #0:</label>
<input type="text" id="mrp-title-0" class="titles" value="">
<label for="comment-0">Comment #0:</label>
<input type="text" id="comment-0" class="comments" value="">
<button id="btn-0" class="buttons">Save Changes</button>
<hr>
<label for="mrp-title-1">Title #1:</label>
<input type="text" id="mrp-title-1" class="titles" value="">
<label for="comment-1">Comment #1:</label>
<input type="text" id="comment-1" class="comments" value="">
<button id="btn-1" class="buttons">Save Changes</button>
<hr>
<label for="mrp-title-2">Title #2:</label>
<input type="text" id="mrp-title-2" class="titles" value="">
<label for="comment-2">Comment #2:</label>
<input type="text" id="comment-2" class="comments" value="">
<button id="btn-2" class="buttons">Save Changes</button>
</div>
foo.php:
<?php
if(isset($_POST['index']) && isset($_POST['title']) && isset($_POST['comment'])){
// if there's a POST request, we retrieve the data.txt content as an array
// depending on the POST index value we change the corresponding item in
// the array to update title and comment values, then write the array as
// new content of the data.txt with the new array $foo.
$index = $_POST['index'];
$title = $_POST['title'];
$comment = $_POST['comment'];
//Do validation and sanitizing here
$temp = '';
$foo = getContent();
$foo[$index]['title'] = $title;
$foo[$index]['comment'] = $comment;
for($i = 0; $i < count($foo); $i++) {
$temp .= $foo[$i]['title'] . ' , ' . $foo[$i]['comment'] . "\n";
}
$temp = trim($temp);
file_put_contents('data.txt', $temp);
}else{
// if no POST request, no changes happened and our array is same as file content
$foo = getContent();
}
// we encode $foo as JSON and echo it back to javascript
$jsonFoo = json_encode($foo);
echo $jsonFoo;
// getting data.txt content and return an array of the content
function getContent(){
$bar = array();
$data = file_get_contents('data.txt');
$rows = explode("\n", $data);
foreach ($rows as $row) {
$cols = explode(",", $row);
$title = trim($cols[0]);
$comment = trim($cols[1]);
$bar[] = array('title' => $title, 'comment' => $comment);
}
return $bar;
}
对于上述文件,一旦 DOM 准备就绪,我们将首次调用 fetchData()
以使用来自数据库 -data.txt 的数据填充输入值。在此示例中,为了简单起见,我们使用 javascript setInterval()
每 10 秒调用一次 fetchData()
,这样如果某些输入值具有已被 userX 更改,所有其他用户将在 10 秒后在他们的屏幕上看到更新的结果,假设 10 秒就足够了,可能少于 10 秒但用户没有时间更改一个输入值均匀,而且你放置的时间越短,你对服务器的负载就越大,反之亦然。
如果您使用与上述相同的代码在测试服务器上创建相同的文件结构 -例如 localhost - 并在 Chrome 中打开包含所有输入字段和按钮的网页 -as userX- 和 Firefox -as userY- 和 IE -as userZ-例如,更改其中一个输入字段的值并点击相应的“保存更改”的按钮
,比方说“Chrome”,您会看到相同字段的值已更新为“Firefox"和 "IE"10 秒后自动。
所以你可以让你的 PHP echo
让我们说 $result
数组 AFTER json_encode
就像在在我的示例中,在 javascript 中,首先使用 jQuery $.parseJSON()
函数将 JSON 对象转换为数组循环并遍历结果并将每一行值推送到 mrp_data_callbacks
,就是这样!
关于javascript - PHP 表单值作为回调函数中的 JS 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34475276/
我在 mongodb 中的玩家和锦标赛之间存在多对多关系。 我希望能够一次将许多玩家添加到锦标赛中。如果没有 ajax,这很简单,但我们有一个包含数千名玩家的数据库,因此表单选择变得巨大。 我们想为此
这个问题已经有答案了: When should I use html's and when spring's in Spring MVC web app? (3 个回答) 已关闭 6 年前。 我正
我正在 C++ Builder XE4 上使用 VCL。 我有以下组件。 FormMain 具有 TButton *B_select; FormSelect(或DialogSelect)具有 TCom
如何在不影响表单控件的情况下更改表单的 alphablend? 德尔福XE7 最佳答案 此问题的一个解决方案是使用多设备应用程序(如果无法使用VCL)。 如果您需要保留透明的TForm,只需更改属性T
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我正在尝试扩展 Django 注册以包含我自己的注册表单。原则上这是相当简单的。我只需要编写自己的表单( CustomRegistrationForm ),它是原始表单( RegistrationFo
我正在尝试为我的网站实现聊天功能。为了做到这一点,我遵循了以下教程:https://channels.readthedocs.io/en/latest/tutorial/ 然后我稍微更改了代码以实现它
有一个问题,我需要用一个 html 表单提交两个相互关联的模型表单。我知道如何提交两个单独的表格,但是在相关模型表格的情况下外键让我发疯。 问题是,第二个表单应该用外键填充字段到第一个表单的实例。 在
我正在创建一个工具,允许某人输入食谱,然后将其保存为 XML 文件,我已经创建了 XSD,但我想知道如何在我的网页上制作一个表单以允许用户输入他们的食谱并遵守模式。我一直在研究 Ajax 和 Jque
在 .net win 表单(如 asp.net web 表单)中是否有可用的验证控件? 因为很难为我的每个控件设置正确的条件,所以我的表单中也有很多重复的代码。 正确的做法是什么? 最佳答案 看看这个
我有一个简短的问题。我正在学习如何使用 javascript 制作注册表,发现此链接非常有用。 http://www.w3resource.com/javascript/form/javascript
我正在开发一个项目,该项目将使用循环将许多表单添加到 mysql 数据库中。在 javascript 部分中,我无法让 var i 在函数 updatesum() 中工作。有人可以帮我吗? 我试图避免
在我的应用程序上有一个包含 2 个字段和一个保存按钮的表单。 在我的 onClick 结束时我需要什么来将光标返回到第一个字段。 我有这个来清除它们 txtData.setText("
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
<input type="text" name="textfield" onKeyPress="javascript:alert(event.
我正在构建的网站有一个登录表单,作为所有其他模板扩展的 base.html 模板的一部分;因此,我需要以某种方式处理每个页面上的登录/注销逻辑。 目前每个页面都在单独的 View 中加载,那么实现它的
我有一个表单类,看起来像.. #forms.py class ExampleForm(forms.Form): color = forms.CharField(max_length=25)
有没有办法在表单定义中给表单一个特殊的错误渲染函数?在 customizing-the-error-list-format 下的文档中它展示了如何为表单提供特殊的错误呈现函数,但似乎您必须在实例化表单
我正在处理由多个页面组成的表单,我想解决验证问题。 当我点击提交按钮时,当前页面上的所有字段都会在下方显示错误消息,但是如果我更改页面,那么我需要再次点击提交,因为这些字段未设置为已触摸。 如果我可以
是否可以附加到继承表单的 exclude 或 widgets 变量? 到目前为止,我有以下设置。 class AddPropertyForm(forms.ModelForm): num_mon
我是一名优秀的程序员,十分优秀!