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

Php 为什么这个ajax请求失败了?,php,jquery,ajax,Php,Jquery,Ajax,这可能是一个简单的问题,但我不明白为什么会发生这种情况。以下是简化代码: Ajax调用: mydata = {'action':'update','options':options}; console.log(mydata); $.ajax({ url: 'dt/scripts/stoplight.php', data: mydata }).success(function(data){

这可能是一个简单的问题,但我不明白为什么会发生这种情况。以下是简化代码:

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"}
$("#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);
            })
为了澄清,这是从浏览器控制台进行的复制和粘贴。该对象是有效对象,正在通过get-like-so传递:

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
进一步澄清。生成的选项如下所示:

action
    "update"
options
    Object { OMS-S="0", OMS-N="0", OHS="0"}
$("#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($\u GET['test']),它工作得很好。用什么?

试试看

使用
$\u POST
而不是
$\u 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->JS->HTML)
  • Ajax:发布一些数据并获取数据,如
    console.log(数据)然后看看你得到了什么
  • 然后执行以下语句:
    if(data.length)
    if(data.suces==='YeahDone')
    (JSON)随便什么。。(通过PHP脚本检查是否所有成功
    echo'YeahDone';
    例如
  • 因此,请使用HTML或alert之类的工具
试试看

 options

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

现在我明白了为什么引号是一个好的实践:p

添加一个错误处理程序来查看错误
$.ajax({url:'dt/scripts/stoplight.php',data:mydata}).done(函数(数据){if(数据==1){alert(“Options Updated”);}else{alert(数据);})。fail(函数(xhr,status,error){alert('error:'+status+':'+error+':'+xhr.responseText)})
我认为您不需要引号中的'action'和'options'{OMS-S=“0”,OMS-N=“0”,OHS=“0”}不是有效的json,应该类似于{OMS-S:“0”,OMS-N:“0”,OHS:“0”},请交叉检查更新的请求以澄清jsonobject@andrew您不需要引号中的操作和选项,但它仍然有效。我这样做是因为我阅读了一次,这是一个很好的实践。如果我在任何这些选项中传递了1,那么php脚本会很好地打印出值。值会随Get一起发送。即使使用$\P,也会出现相同的症状OST。@Bil1好的,现在我想你的PHP有问题了:我会想……但这三行PHP实际上就是其中的全部内容。我把其他所有内容都注释掉了。我想这毕竟与对象创建有关……我将用我发现的内容更新我的答案。@l2aelba很高兴你发现这很有趣:-P。我不知道这是什么意思告诉我为什么“选项”:对php脚本使用get或post请求时的选项会挂起请求。我最终将其更改为“设置”:在php文件和其他所有内容中进行适当更改的选项都一样,效果很好。我更新了我的问题,以反映如何生成选项。