为什么这个ajax请求失败了?

时间:2013-09-03 12:37:05

标签: php jquery ajax

这可能是一个简单的问题,但我不明白为什么会这样。这是简化代码:

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']);

为什么会这样?

UPDATE:

我想我发现了这个问题。我所做的就是将'options'改为'test',将php更改为print_r($ _ GET ['test']),它运行正常。 WTH?

2 个答案:

答案 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')
       }            
   }
});
  • 请逐一进行(PHP - &gt; JS - &gt; HTML)
  • Ajax:发布一些数据并获取console.log(data);之类的数据,看看你得到了什么。
  • 然后做声明:if(data.length) if(data.sucess==='YeahDone')(JSON)无论如何..(例如,如果所有成功echo 'YeahDone';,请通过PHP脚本检查..
  • 使用HTML或警报或其他任何方式做某事

答案 1 :(得分:0)

尝试

 options

  Object { "OMS-S":"0", "OMS-N":"0", "OHS":"0"}

现在我明白为什么引用是一个好习惯:P