Php 为什么通过AJAX发送url会抛出403错误?

Php 为什么通过AJAX发送url会抛出403错误?,php,jquery,ajax,codeigniter-3,Php,Jquery,Ajax,Codeigniter 3,我正试图通过ajax保存社交媒体url。这是表格的一部分: <div class="row"> <div class="col-sm-4"> <label form="campana_fb">Facebook</label> <input type="text" id="campana_fb" name="campana_fb" class="form-control"> </div

我正试图通过ajax保存社交媒体url。这是表格的一部分:

<div class="row">
    <div class="col-sm-4">
        <label form="campana_fb">Facebook</label>
        <input type="text" id="campana_fb" name="campana_fb" class="form-control">
    </div>
    <div class="col-sm-4">
        <label form="campana_tw">Twitter</label>
        <input type="text" id="campana_tw" name="campana_tw" class="form-control">
    </div>
    <div class="col-sm-4">
        <label form="campana_in">Instagram</label>
        <input type="text" id="campana_in" name="campana_in" class="form-control">
    </div>
</div>
正如您所看到的,我尝试使用
encodeURI
但仍然不起作用,只有在输入URL时,我才获得
请求方法:POST Status code:403 probled
,否则数据保存成功

我在构造函数中添加了标题

class Campana extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
        ...
        header('Access-Control-Allow-Origin: *');
        header('Access-Control-Expose-Headers: Access-Control-Allow-Origin');
    }

仅当我在输入和生产中输入URL时,禁止状态才会发生,在本地,我没有任何问题。

Hi-Laviku将encodeURI替换为encodeURI组件 参考:

很抱歉,我无法评论没有足够的分数:)

虽然这并不能回答为什么encodeURI不工作的问题,但您是否尝试过像这样序列化表单:

var form = $("#formulario");

$.ajax({
type : "POST", 
url : form.attr('action'),
dataType : 'json', 
data : form.serialize() + "&campana_descripcion=" + campana_descripcion, 
success : function(respuesta){
    $.unblockUI();
    if(respuesta.estado){
        alerta(respuesta.mensaje, 'success');
        CKEDITOR.instances.campana_descripcion.setData("");
    }
    else{
        alerta(respuesta.mensaje, 'error');
    }
}, 
error: function(error){
    $.unblockUI();
    alerta(error.responseText, 'error');
}
});

在ajax中,您提到的数据类型是json,但这里只传递值,所以将其删除

$.ajax({
type : "POST", 
url : $("#formulario").attr('action'),

data : {
    campana_descripcion: campana_descripcion, 
    campana_nombre: $("#campana_nombre").val(),
    camapana_meta: $("#camapana_meta").val(),
    campana_id: $("#campana_id").val(),
    cuenta_1: $("#cuenta_1").val(),
    banco_1: $("#banco_1").val(),
    cuenta_2: $("#cuenta_2").val(),
    banco_2: $("#banco_2").val(),
    campana_fb: encodeURI($("#campana_fb").val()),
    campana_tw: encodeURI($("#campana_tw").val()),
    campana_in: encodeURI($("#campana_in").val()),
}, 
success : function(respuesta){
    $.unblockUI();
    if(respuesta.estado){
        alerta(respuesta.mensaje, 'success');
        CKEDITOR.instances.campana_descripcion.setData("");
    }
    else{
        alerta(respuesta.mensaje, 'error');
    }
}, 
error: function(error){
    $.unblockUI();
    alerta(error.responseText, 'error');
}
});

尝试使用
url:$(“#formulario”).prop('action'),
@JohnR。问题不在于表单url(action),而在于我要发送的输入值
此输入包含类似
https://twitter.com/CinematecaNic
不需要编码url campana\u fb:encodeURI(),只是作为普通文本值发送?@Gopal我之前已经尝试过了,但是我仍然会得到
状态码:403禁止
@laviku你能读一下这篇文章的评论吗?您是否安装了FireBug或任何其他调试工具?您是否可以评论或添加帖子内容?控制台中也有错误吗?我没有得到任何错误,这只发生在生产环境中。或者你不能只使用序列化吗?哦,对了,你在用什么Web服务器NGINX?我试过serialize,没有机会。。我正在使用ApacherRunning out of ideas,您有权访问Apache日志吗?
$.ajax({
type : "POST", 
url : $("#formulario").attr('action'),

data : {
    campana_descripcion: campana_descripcion, 
    campana_nombre: $("#campana_nombre").val(),
    camapana_meta: $("#camapana_meta").val(),
    campana_id: $("#campana_id").val(),
    cuenta_1: $("#cuenta_1").val(),
    banco_1: $("#banco_1").val(),
    cuenta_2: $("#cuenta_2").val(),
    banco_2: $("#banco_2").val(),
    campana_fb: encodeURI($("#campana_fb").val()),
    campana_tw: encodeURI($("#campana_tw").val()),
    campana_in: encodeURI($("#campana_in").val()),
}, 
success : function(respuesta){
    $.unblockUI();
    if(respuesta.estado){
        alerta(respuesta.mensaje, 'success');
        CKEDITOR.instances.campana_descripcion.setData("");
    }
    else{
        alerta(respuesta.mensaje, 'error');
    }
}, 
error: function(error){
    $.unblockUI();
    alerta(error.responseText, 'error');
}
});