这可能是一个简单的问题,但我不明白为什么会这样。这是简化代码:
Ajax电话:
mydata = {'action':'update','options':options};
console.log(mydata);
$.ajax({
url: 'dt/scripts/stoplight.php',
data: mydata
}).success(function(data){
if (data == 1) {
alert("Options Updated");
}else{
alert(data);
}
})
我的数据如下:
action
"update"
options
Object { OMS-S="0", OMS-N="0", OHS="0"}
为了澄清,这是来自浏览器控制台的复制和粘贴。该对象是一个有效的对象,并通过get传递:
https://*pathtomysite*/dt/scripts/stoplight.php?action=update&options%5BOMS-S%5D=0&options%5BOMS-N%5D=0&options%5BOHS%5D=0
此请求无限期挂起。
https://*pathtomysite*/dt/scripts/stoplight.php?action=update&options%5BOMS-S%5D=0&options%5BOMS-N%5D=0&options%5BOHS%5D=1
进一步澄清。选项生成如下:
$("#stoplight_apply").click(function(){
var radios = $("#stoplight_options").find("input:radio:checked");
options = {};
$.each(radios, function( key, value) {
options[value.name] = value.value;
});
set_stoplight_options(options);
})
这个工作正常。
如果将这些选项中的任何一个设置为0以外的任何选项,则php脚本将会运行得很好!如果所有这些都是0,那么它会无限期地挂起并加载。
我注释掉了可能导致问题的所有PHP,所以目前脚本执行此操作:
$action = $_GET['action']; //Get or update
print_r($_GET['action']);
print_r($_GET['options']);
为什么会这样?
我想我发现了这个问题。我所做的就是将'options'改为'test',将php更改为print_r($ _ GET ['test']),它运行正常。 WTH?
答案 0 :(得分:2)
<强>尝试强>
使用$_POST
而不是$_GET
$action = $_POST['action'];
print_r($_POST['action']);
print_r($_POST['options']);
Ajax:
var mydata = {'action':'update','options':options};
$.ajax({
type: 'POST',
url: 'dt/scripts/stoplight.php',
data: mydata,
success: function(data){
if(data.length) {
alert('done')
}
}
});
console.log(data);
之类的数据,看看你得到了什么。if(data.length)
if(data.sucess==='YeahDone')
(JSON)无论如何..(例如,如果所有成功echo 'YeahDone';
,请通过PHP脚本检查.. 答案 1 :(得分:0)
尝试
options
Object { "OMS-S":"0", "OMS-N":"0", "OHS":"0"}
现在我明白为什么引用是一个好习惯:P