在同一页面上使用javascript或AJAX更改PHP变量

时间:2018-06-11 21:03:59

标签: javascript php html ajax xhtml

我知道这个问题已经被问了很多次,但我认为在我的情况下,我正在处理不同的事情,或者更好的说法,我需要不同的东西。

我正在使用一个开源作为约会预订但不幸的是,客户可以选择服务而不是其持续时间。我可以通过使用不同的分钟长度手动添加更多次来重新创建相同的服务,但是这样,在下拉菜单中,会出现很多选项,而这不是我正在寻找的解决方法。

所以,我想到的是,使用下拉列表来选择时间,并根据该选择,在服务下拉菜单中,将仅显示基于时间的相应时间。 网站看起来像这样: site

我正在寻找的是,无论何时我选择nr小时......我只能获得属于那个小时的服务而不是所有服务。 我没有使用刷新页面的按钮,但是我无法创建另一个文件,然后重定向到这里。

这是对此感兴趣的代码的一部分:

<select id="select-service" class="col-xs-12 col-sm-4 form-control">

<?php
    // Group services by category, only if there is at least one service with a parent category.
    $has_category = FALSE;
    foreach($available_services as $service) {
        if ($service['category_id'] != NULL) {
            $has_category = TRUE;
            break;
        }
    }

    if ($has_category) {
        $grouped_services = array();

        foreach($available_services as $service) {
            if ($service['category_name'] == '2 HOURS' || $service['category_name'] == '1 HOUR' || $service['category_name'] == '3 HOURS') {
                if (!isset($grouped_services[$service['category_name']])) {
                    $grouped_services[$service['category_name']] = array();
                }

                $grouped_services[$service['category_name']][] = $service;
            }

        }

        // We need the uncategorized services at the end of the list so
        // we will use another iteration only for the uncategorized services.
        $grouped_services['uncategorized'] = array();
        foreach($available_services as $service) {
            if ($service['category_id'] == NULL) {
                $grouped_services['uncategorized'][] = $service;
            }
        }

        foreach($grouped_services as $key => $group) {
            $group_label = ($key != 'uncategorized')
                    ? $group[0]['category_name'] : 'Uncategorized';

            if (count($group) > 0) {
                echo '<optgroup label="' . $group_label . '">';
                foreach($group as $service) {
                    echo '<option value="' . $service['id'] . '">'
                        . $service['name'] . '</option>';
                }
                echo '</optgroup>';
            }
        }
    }  else {
        foreach($available_services as $service) {
            echo '<option value="' . $service['id'] . '">' . $service['name'] . '</option>';
        }
    }
?>
                            </select>

1 个答案:

答案 0 :(得分:0)

我只为我的平台使用一个AJAX函数。以下是一个最小的例子:

function ajax(method,url,param_id_container_pos,id_container)
{
 var xhr = new XMLHttpRequest();
 xhr.open(method,url,true);

 xhr.onreadystatechange = function()
 {
  if (xhr.readyState=='4')
  {
   var type = xhr.getResponseHeader('content-type').split('/')[1];
   if (method=='post')
   {
    if (type=='json')
    {
     var j = JSON.parse(xhr.responseText);
     console.log(j);//Check your browser's developer network panel.
     eval(j.javascript);//eval is frowned upon though just use to call a sequel JS function.
    }
   }
  }
 }
}

//Example uses:
ajax('get','admin/?ajax=account','inside','id_target');

var fd = new FormData();
fd.append('ajax','admin_post_account_approval');
fd.append('parameter1',object1);
fd.append('parameter2',object2);
ajax('post',path+'admin/',fd);

您的目标是尽可能减少代码,高度可重复使用。

关于服务器和PHP,您需要记住:永远不要信任用户。这意味着您需要验证所有内容:

<?php
if (isset($_POST['ajax']) && $_POST['ajax']=='admin_post_account_approval')
{
 if (!isset($_POST['parameter1'])) {/*error_handling*/}
 else if (!isset($_POST['parameter1'])) {/*error_handling*/}
 else if (![condition not met]) {}
 else
 {
  if ([all conditions met])
  {
   header('Content-Type: application/json');
   $array = array('javascript'=>'alert(\'Just a JavaScript alert triggered by PHP.\');');
   die(json_encode($array));
  }
 }
}
?>

服务器端代码,PHP应该被认为是现实生活:总是先失败 并测试表格参数中长度,正确字符或不正确字符的条件等。

此外,我强烈建议服务器使用JSON进行响应,如上面的代码中所示。因为我只编写自己的代码并且不能与其他人的代码一起工作,所以这更像是一种通用的响应,而不是尝试定位您正在使用的任何软件。无论您是否启用错误报告,并在您使用的任何浏览器中关注您的开发人员工具,您都将实现这一目标。祝你好运。