我需要使用javascript从当前窗口url获取hash#值(无法通过PHP获取),然后使用它来设置具有CI的set_value()函数的表单输入的值attibute。
任何想法如何在javascript中获取值然后将其放入PHP函数? :-S
提前致谢!
答案 0 :(得分:2)
在Javascript中你可以实现这个目标
hash = window.location.hash;
在PHP中,您可以使用parse_url()
parse_url() : Return Values On seriously malformed URLs, parse_url() may return FALSE. Otherwise an associative array is returned, whose components may be (at least one): * scheme - e.g. http * host * port * user * pass * path * query - after the question mark ? * fragment - after the hashmark #
答案 1 :(得分:2)
我不清楚你是否完全理解Javascript和PHP之间的关系,所以我假设你没有。 PHP在服务器上运行并将HTML输出到浏览器(以及一些标题和其他内容)。将HTML发送到浏览器后,用户对您的站点所做的操作将无法控制,直到他的浏览器执行另一个GET或POST请求(或打开持久的Web套接字连接)。正如您所提到的,PHP无法直接读取哈希值,因为它只能被限制在浏览器中,只能通过Javascript访问。由于您的特定请求的PHP脚本已停止运行且页面数据已输出到浏览器,因此使用Javascript获取值,使用其他http请求将其发送回PHP,使用set_value()功能,然后是什么?
如果使用window.location.hash并将输入框的值设置为等于它,则可以在用户提交表单时使用set_value()。看一下CI的set_value()辅助函数:
function set_value($field = '', $default = '')
{
if (FALSE === ($OBJ =& _get_validation_object()))
{
if ( ! isset($_POST[$field]))
{
return $default;
}
return form_prep($_POST[$field], $field);
}
return form_prep($OBJ->set_value($field, $default), $field);
}
首先检查您是否设置了表单验证对象。如果你有,它使用该对象的set_value运行form_prep()函数(可能是为了管理你在表单验证中设置的任何规则。如果你没有,它会看到$ _POST数组中是否存在该字段。如果它没有,它返回默认值。如果是,它返回$ _POST数组中的值。所以如果你a)为它设置一个表单验证规则,b)给那个输入框你想要的名字在set_value()函数中使用,您将能够使用Javascript检索已输入该输入框的PHP中的哈希值。