当POST数据

时间:2017-05-10 13:49:51

标签: javascript jquery ajax

我有以下Ajax脚本在传递没有数据值时成功返回,但由于另一个进程的约束,我相信我们传递的值是收到400错误背后的罪魁祸首。

AJAX调用如下

  type:"POST",
  url:"ajax/dashboards/totalexpend.php",
  contentType: "application/json; charset=utf-8",
  dataType: "json",
  data:{site:(jmsite),date:(jmdate),dir:(jmdir)}, 
  success:function(data)

jmsite示例

[Site].[OwnerDivSite].[Site].[883]

jmdate示例

[YearMonth].[Month].[2017]&[1]

jmdir

[Direction].[Dir].[O]

根据Chrome

,请求如下
site=%22%5BSite%5D.%5BOwnerDivSite%5D.%5BSite%5D.%5B883%5D%22&date=%22%5BYearMonth%5D.%5BMonth%5D.%5B2017%5D%26%5B1%5D%22&dir=%22%5BDirection%5D.%5BDir%5D.%5BO%5D%22

我尝试在所有值上使用JSON.stringify,以及encodeURIComponent,但都没有任何影响。我担心它与传递括号有关。我也尝试将ajax调用设置为传统而没有运气。

感谢您的帮助!

EDITED

                var test_site = "'[Site].[OwnerDivSite].[Site].[883]'";
                var test_date = "'[YearMonth].[Month].[2017]&[1]'";
                var test_dir = "'[Direction].[Dir].&[O]'";

                var request = {site:test_site,date:test_date,dir:test_dir};

                var form_data = new FormData();

                for(var key in request) {

                    form_data.append(key, request[key]);
                }

                console.log(form_data);



                    $.ajax
                    ({
                        type:"POST",
                        url:"ajax/dashboards/totalexpend.php",
                        data: form_data,
                        contentType: false,
                        processData: false,
                        //data: JSON.stringify({site:msite,date:mdate,dir:mdir}), 
                        //contentType: "application/json",
                        //dataType: "json",

编辑2

<script src="js/jquery-3.1.1.js"></script>
<script type='text/javascript'>
var test_site = "[Site].[OwnerDivSite].[Site].[883]";
var test_date = "[YearMonth].[Month].[2017]&[1]";
var test_dir = "[Direction].[Dir].&[O]";


var site = $.param( { sites: test_site }, true);
var dates = $.param( { dates: test_date }, true);
var dirs = $.param( { dirs: test_dir }, true);


new_data = { test_site,test_date,test_dir};

new_data = JSON.stringify(new_data);


    $.ajax
    ({
        type:"POST",
        url:"ajax/dashboards/totalexpend.php",
        data: (new_data), 
        contentType: "application/json",
        dataType: "json",
        success:function(data)
        {               

        }
    });

</script>

1 个答案:

答案 0 :(得分:1)

其中一个令人沮丧的时刻......

我们在Apache服务器上启用了Mod_Security,并且它达到了2条规则,即Repeatative Non-Word Chars和SQL Injection。我们增加了4个字符的重复规则,并从SQL注入裁定中删除了[和]。

如果这不能解决您的问题,请参阅OP中的答案 https://stackoverflow.com/users/3898495/silenttremorhttps://stackoverflow.com/users/5947043/adyson

在此学习规则,检查Apache和PHP日志。