我有以下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>
答案 0 :(得分:1)
其中一个令人沮丧的时刻......
我们在Apache服务器上启用了Mod_Security,并且它达到了2条规则,即Repeatative Non-Word Chars和SQL Injection。我们增加了4个字符的重复规则,并从SQL注入裁定中删除了[和]。
如果这不能解决您的问题,请参阅OP中的答案 https://stackoverflow.com/users/3898495/silenttremor和 https://stackoverflow.com/users/5947043/adyson
在此学习规则,检查Apache和PHP日志。