Json Ajax PHP为空

Json Ajax PHP为空,php,jquery,ajax,json,null,Php,Jquery,Ajax,Json,Null,我用GeolocationJavaScript获得一个数组,然后我想通过ajax将这个数组传递给一个php脚本来处理它,并得到一个处理后的数组。不幸的是,传递给php的数组似乎总是空的,我不知道为什么 我的JavaScript/jQuery: dataArray = []; var lat = pos.coords.latitude; dataArray.push({'lat':lat}); var lon = pos.coords.longitu

我用GeolocationJavaScript获得一个数组,然后我想通过ajax将这个数组传递给一个php脚本来处理它,并得到一个处理后的数组。不幸的是,传递给php的数组似乎总是空的,我不知道为什么

我的JavaScript/jQuery:

dataArray = [];
        var lat = pos.coords.latitude;
        dataArray.push({'lat':lat});
        var lon = pos.coords.longitude;
        dataArray.push({'lon':lon});
        var identifier = 'ajax';
        dataArray.push({'identifier':identifier});
        console.debug(dataArray);

        $.ajax({
                async:   true,
                type:        'post',
                cache:       false,
                url:         'custom.php',
                data:        {myJson: dataArray},
                dataType   : 'json',
                success: function(data){
                    console.debug(data);
                    var json = $.parseJSON(data);
                    console.debug(json);
                    alert(json);
                }
        });
我的php:

$JSArray['array'] = json_decode($_POST['myJson'], true);
$_SESSION['jsonArray'] = $JSArray['array'];
var_dump($_SESSION);

结果总是
[“jsonArray”]=>NULL

试试这个。它对我有用

 (function($){
if(navigator.geolocation){return;}
var domWrite = function(){
        setTimeout(function(){
            throw('document.write is overwritten by geolocation shim. This method is incompatible with this plugin');
        }, 1);
    },
    id = 0
;
var geoOpts = $.webshims.cfg.geolocation.options || {};
navigator.geolocation = (function(){
    var pos;
    var api = {
        getCurrentPosition: function(success, error, opts){
            var locationAPIs = 2,
                errorTimer,
                googleTimer,
                calledEnd,
                endCallback = function(){
                    if(calledEnd){return;}
                    if(pos){
                        calledEnd = true;
                        success($.extend({timestamp: new Date().getTime()}, pos));
                        resetCallback();
                        if(window.JSON && window.sessionStorage){
                            try{
                                sessionStorage.setItem('storedGeolocationData654321', JSON.stringify(pos));
                            } catch(e){}
                        }
                    } else if(error && !locationAPIs) {
                        calledEnd = true;
                        resetCallback();
                        error({ code: 2, message: "POSITION_UNAVAILABLE"});
                    }
                },
                googleCallback = function(){
                    locationAPIs--;
                    getGoogleCoords();
                    endCallback();
                },
                resetCallback = function(){
                    $(document).unbind('google-loader', resetCallback);
                    clearTimeout(googleTimer);
                    clearTimeout(errorTimer);
                },
                getGoogleCoords = function(){
                    if(pos || !window.google || !google.loader || !google.loader.ClientLocation){return false;}
                    var cl = google.loader.ClientLocation;
                    pos = {
                        coords: {
                            latitude: cl.latitude,
                            longitude: cl.longitude,
                            altitude: null,
                            accuracy: 43000,
                            altitudeAccuracy: null,
                            heading: parseInt('NaN', 10),
                            velocity: null
                        },
                        //extension similiar to FF implementation
                        address: $.extend({streetNumber: '', street: '', premises: '', county: '', postalCode: ''}, cl.address)
                    };
                    return true;
                },
                getInitCoords = function(){
                    if(pos){return;}
                    getGoogleCoords();
                    if(pos || !window.JSON || !window.sessionStorage){return;}
                    try{
                        pos = sessionStorage.getItem('storedGeolocationData654321');
                        pos = (pos) ? JSON.parse(pos) : false;
                        if(!pos.coords){pos = false;} 
                    } catch(e){
                        pos = false;
                    }
                }
            ;

            getInitCoords();

            if(!pos){
                if(geoOpts.confirmText && !confirm(geoOpts.confirmText.replace('{location}', location.hostname))){
                    if(error){
                        error({ code: 1, message: "PERMISSION_DENIED"});
                    }
                    return;
                }
                $.ajax({
                    url: 'http://freegeoip.net/json/',
                    dataType: 'jsonp',
                    cache: true,
                    jsonp: 'callback',
                    success: function(data){
                        locationAPIs--;
                        if(!data){return;}
                        pos = pos || {
                            coords: {
                                latitude: data.latitude,
                                longitude: data.longitude,
                                altitude: null,
                                accuracy: 43000,
                                altitudeAccuracy: null,
                                heading: parseInt('NaN', 10),
                                velocity: null
                            },
                            //extension similiar to FF implementation
                            address: {
                                city: data.city,
                                country: data.country_name,
                                countryCode: data.country_code,
                                county: "",
                                postalCode: data.zipcode,
                                premises: "",
                                region: data.region_name,
                                street: "",
                                streetNumber: ""
                            }
                        };
                        endCallback();
                    },
                    error: function(){
                        locationAPIs--;
                        endCallback();
                    }
                });
                clearTimeout(googleTimer);
                if (!window.google || !window.google.loader) {
                    googleTimer = setTimeout(function(){
                        //destroys document.write!!!
                        if (geoOpts.destroyWrite) {
                            document.write = domWrite;
                            document.writeln = domWrite;
                        }
                        $(document).one('google-loader', googleCallback);
                        $.webshims.loader.loadScript('http://www.google.com/jsapi', false, 'google-loader');
                    }, 800);
                } else {
                    locationAPIs--;
                }
            } else {
                setTimeout(endCallback, 1);
                return;
            }
            if(opts && opts.timeout){
                errorTimer = setTimeout(function(){
                    resetCallback();
                    if(error) {
                        error({ code: 3, message: "TIMEOUT"});
                    }
                }, opts.timeout);
            } else {
                errorTimer = setTimeout(function(){
                    locationAPIs = 0;
                    endCallback();
                }, 10000);
            }
        },
        clearWatch: $.noop
    };
    api.watchPosition = function(a, b, c){
        api.getCurrentPosition(a, b, c);
        id++;
        return id;
    };
    return api;
})();

$.webshims.isReady('geolocation', true);
    })(jQuery);


     jQuery(window).ready(function(){ 

navigator.geolocation.getCurrentPosition(successCallback,errorCallback,{timeout:10000});

function successCallback(pos) {

    $('#localstore').
    load("geo?latitude="+ pos.coords.latitude +"&longitude=" + pos.coords.longitude, function() 
    {
        $('#storefinder').hide();
        $('#localstore').show();
    });

}
function errorCallback(pos) {
    /*      
    $('#storefinder').show();
    $('#localstore').hide();
    */
}



});

脚本可能有多个失败点。 我会测试每一步,看看它失败的地方(通过一次注释一个echo语句):

另外,ajax调用应该包含
警报(数据)
而不包含parseJSON,因为服务器没有发送JSON,它只是回显一个var_转储:

$.ajax({
                async:   true,
                type:        'post',
                cache:       false,
                url:         'custom.php',
                data:        {myJson: dataArray},
                dataType   : 'html', // change back to json when you send json from server
                success: function(data){
                    console.debug(data);
                    //var json = $.parseJSON(data);
                    //console.debug(json);
                    //alert(json);
                    alert(data);
                }
        });

为什么要使用JSON.stringify?我是ajax/JSON新手,我想我必须先对数组进行stringify,然后才能将其传递给php。但是如果我错了,请纠正我,这是不必要的。删除该行并尝试var_dump($_POST)以检查PHP中的内容。您可以尝试var_dump整个$_POST变量以查看原始数据是什么(更好的是$_REQUEST变量,它是$_GET、$_POST和$_COOKIE之间的组合,对于调试很有用,但在sharp代码中应该避免),发送响应时,最佳做法是在PHP:header('Content-type:application/Json')中回显Json之前添加响应;这使你的应用程序更加安全。如果你需要从PHP页面发送大量数据,那么你需要执行“echo json_encode($array);”发送通过json编码的数据。除非您临时将“dataType”更改为“html”,否则我不确定alert(data)会起什么作用,但我可能错了……当然,除非您像Husman刚才提到的那样将json_编码行添加到PHP中,以使其成为有效的json。但是原始文本可能更容易调试,直到您正确地获得对PHP的请求。您是正确的,必须将其设置为html才能工作,我现在将编辑我的答案。
$.ajax({
                async:   true,
                type:        'post',
                cache:       false,
                url:         'custom.php',
                data:        {myJson: dataArray},
                dataType   : 'html', // change back to json when you send json from server
                success: function(data){
                    console.debug(data);
                    //var json = $.parseJSON(data);
                    //console.debug(json);
                    //alert(json);
                    alert(data);
                }
        });