0

我试过这些JS代码组合:

var aion_settings = [];

function aion_save_settings(){

    //Users on the Site Frontend
    $('.setting-site-users').each(function(){
        aion_settings[$(this).prop('id')]=$(this).is(':checked');
    });

    console.log(aion_settings);

    $.ajax({
        method:'post',
        url:'/save_settings',
        dataType:'json',
        data:{
            settings: function(){
                return aion_settings;
            },
            other_data: 'Other Data'
        },
        success:function(result){
            console.log(result);
        }
    });
}

和...

function aion_save_settings(){

    var aion_settings = [];

    //Users on the Site Frontend
    $('.setting-site-users').each(function(){
        aion_settings[$(this).prop('id')]=$(this).is(':checked');
    });

    console.log(aion_settings);

    $.ajax({
        method:'post',
        url:'/save_settings',
        dataType:'json',
        data:{
            settings: aion_settings,
            other_data: 'Other Data'
        },
        success:function(result){
            console.log(result);
        }
    });
}

..和

var aion_settings = [];

function aion_save_settings(){

    //Users on the Site Frontend
    $('.setting-site-users').each(function(){
        aion_settings[$(this).prop('id')]=$(this).is(':checked');
    });

    console.log(aion_settings);

    $.ajax({
        method:'post',
        url:'/save_settings',
        dataType:'json',
        data:{
            settings: aion_settings,
            other_data: 'Other Data'
        },
        success:function(result){
            console.log(result);
        }
    });
}

..这些组合与:

$.ajax({
    method:'post',
    url:'/save_settings',
    dataType:'json',
    data:aion_settings,
    success:function(result){
        console.log(result);
    }
});

在这个JQuery页面上,它甚至有这个例子:

var xmlDocument = [create xml document];
var xmlRequest = $.ajax({
  url: "page.php",
  processData: false,
  data: xmlDocument
});

xmlRequest.done(handleResponse);

在接收端,我有这个PHP代码:

$app->post('/save_settings',function() use ($app){

    $aion_settings=$app->request()->post();

    var_dump($aion_settings);

    //Save the aion_settings
    if(aion_logged_in_user_super()){

        global $aion_db;
        if(is_array($aion_settings)) foreach($aion_settings as $setting_key => $setting){

            //Get the setting's ID
            $current_setting = array();
            $current_setting = $aion_db->queryFirstRow("SELECT id FROM settings WHERE setting_key=%s",$setting_key);

            if(!isset($current_setting['id'])) $current_setting['id']=NULL;

            $aion_db->insertUpdate('settings',array(
                'id'=>$current_setting['id'],
                'setting_key'=>$setting_key,
                'value'=>serialize($setting)
            ));
        }
    }
});

在发送请求aion_settings之前正确设置$.ajax。但是,对象settings并没有在 PHP 端被捕获,虽然other_data被捕获了?下面的最后一行显示了对象准备通过console.log但未设置通过$.ajax。我被难住了,有什么帮助吗?

在发送 var 之前显示 PHP 和 JS 端的 Chrome DEV 工具

代码截图

4

2 回答 2

0

这就是我修复它的方法:

JS端:

function aion_save_settings(){

    var aion_settings = new Object();   

    //Users on the Site Frontend
    $('.setting-site-users').each(function(){
        aion_settings[$(this).prop('id')]=$(this).is(':checked');
    });

    console.log(aion_settings);

    $.ajax({
        method:'post',
        url:'/save_settings',
        dataType:'json',
        data:aion_settings,
        success:function(result){
            console.log(result);
        }
    });
}

PHP端:

$app->post('/save_settings',function() use ($app){

    $aion_settings=$app->request()->post(); 

    var_dump($aion_settings);

    //Save the aion_settings
    if(aion_logged_in_user_super()){

        global $aion_db;
        if(is_array($aion_settings)) foreach($aion_settings as $setting_key => $setting){

            //Get the setting's ID
            $current_setting = array();
            $current_setting = $aion_db->queryFirstRow("SELECT id FROM settings WHERE setting_key=%s",$setting_key);

            if(!isset($current_setting['id'])) $current_setting['id']=NULL;

            $aion_db->insertUpdate('settings',array(
                'id'=>$current_setting['id'],
                'setting_key'=>$setting_key,
                'value'=>serialize($setting)
            ));
        }
    }
});

请与我上面的问题进行比较。

在此处输入图像描述

在此处输入图像描述

于 2013-08-15T18:16:16.693 回答
0

data您的$.ajax函数的参数应具有以下格式:

data: {
    'settings': aion_settings,
    'other_data': 'Other Data'
},
于 2013-07-30T21:34:01.887 回答