我正在尝试使用Ajax将值发送到Codeigniter中的Controller文件但没有成功。我已经搜索了这个问题,我现在这个问题多次在这里,但仍然找不到闷闷不乐。希望任何人可以帮我。 谢谢!
Js档案。
function submitSend()
{
var message = $('#sms').val();
if(message == "")
{
$("#sms").attr("placeholder", "Type a message please...");
return false;
}
$.ajax(
{
url: "<?php echo base_url();?>/mychat/send",
type: 'POST',
data:{
'<?php echo $this->security->get_csrf_token_name(); ?>' : '<?php echo $this->security->get_csrf_hash(); ?>',
'message': message
},
success: function (data)
{
window.console.log('Successful');
},
error :function(data)
{
window.console.log('Failed');
}
});
}
控制器功能。它在名为MyChat的文件中。
public function send()
{
$message = $this->input->post('message');
echo $message;
}
答案 0 :(得分:1)
在包含JS文件
之前,在页脚视图中添加此代码<?php $CI =& get_instance(); ?>
<script>
var csrf_name = '<?php echo $CI->security->get_csrf_token_name(); ?>';
var csrf_hash = '<?php echo $CI->security->get_csrf_hash(); ?>';
</script>
只需在任何需要的地方调用这些变量,就像这样
data:{
csrf_name : csrf_hash,
'message': message
},
答案 1 :(得分:0)
我担心您无法在PHP
个文件中使用JavaScript
代码,因为您已经提到过您有JS
个文件。
您必须在 PHP
文件中运行.php
个代码。
也许您可以通过提取submitSend()
代码以及PHP
来稍微分离$('#sms').val()
函数并使其更加模块化。这些可以作为参数传递给函数,您可以将其称为(.php
个文件)。
答案 2 :(得分:0)
最有可能是因为CSRF令牌尝试禁用csrf并检查它是否由于csrf然后将csrf配置中的特定功能列入白名单
答案 3 :(得分:0)
你不能在js文件中使用php标签
url: "<?php echo base_url();?>/mychat/send", //this line in js file is wrong
你只能在.php文件的脚本标签中使用php标签,就像这样
<script>
// ... some code here
url: "<?php echo base_url();?>/mychat/send",
// ... some code here
</script>
或在标题html中添加此行
<script>
var BASE_URL = '<?php echo base_url(); ?>';
</script>
并在js文件中使用它
....
url: BASE_URL+"mychat/send",
....
答案 4 :(得分:0)
这对我有用。
/app/Config/Security.php
/**
* --------------------------------------------------------------------------
* CSRF Token Name
* --------------------------------------------------------------------------
*
* Token name for Cross Site Request Forgery protection cookie.
*
* @var string
*/
public $tokenName = 'csrf_token_name';
在我的表单中
<input type="hidden" name="<?= csrf_token() ?>" value="<?= csrf_hash() ?>" />
在 script.js 中
var tokenHash=jQuery("input[name=csrf_token_name]").val();
$.ajax({
method: "POST",
url: "/somecontroller",
data: { name: "John", location: "Boston" },
beforeSend: function (xhr)
{
xhr.setRequestHeader('X-CSRF-Token' , tokenHash);
},
})
.done(function( msg ) {
console.log( "Data Saved: " + msg );
});