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

时间:2016-03-03 03:52:01

标签: php jquery ajax codeigniter-3

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

<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>

ajax代码

$.ajax({
    type : "POST", 
    url : $("#formulario").attr('action'),
    dataType : 'json', 
    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');
    }
});

正如您所看到我尝试使用encodeURI但仍无法正常工作,只有在我输入Urls时仍然会获得Request Method:POST Status Code:403 Forbidden,否则数据会成功保存。

我在构造函数

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

仅当我在输入和生产时输入网址时才会出现禁止状态,在本地我没有任何问题。

2 个答案:

答案 0 :(得分:0)

Hi Laviku用encodeURIComponent替换encodeURI 参考:http://www.w3schools.com/jsref/jsref_encodeuricomponent.asp

对不起,我无法评论不够的积分:)

虽然这并没有回答为什么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');
}
});

答案 1 :(得分:0)

在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');
}
});