如何访问php对象的返回json数据

时间:2012-12-05 13:19:49

标签: php jquery json

我在php中创建了一个大型数据结构,我将其发送回jQuery“post”请求。 数据以下列格式到达

"{\"event\":{\"id\":\"5\",\"title\":\"Test Event\",\"event_ref\":\"TEST\",\"approval\":\"na\",\

数据以双引号字符串的形式发回,双引号已转义。 url目录标记也会被转义。 以上只是返回的字符串的一小部分。

  • 如果我发出警报(数据),我会在警告框中显示字符串。
  • 如果我发出警报(数据[0]),我会收到“显示
  • 如果我提醒(数据[事件])我显示未定义。

通常,我不能使用点表示法或数组表示法来访问数据。 我怀疑我需要摆脱外部封闭的双引号并取消它。 数据是一个数组,一些项是简单的值,一些是对象,一些是对象数组。

如何访问返回的数据? 虽然有些对象经常丢失,但结构总是相同的。

js代码是:

//  The login button
$("#loginButton").click(    function(){
var username = $('input#login-username').val();     
var password = $('input#login-passwd').val();       
    alert("Login button clicked with username/password: "+username+" / "+password);
$.post(
    $_interface,
    { option: 'login', userID: username, pwd: password },
    function(response){
        if (response) {
//              alert("Response = true");
            $.post(
                $_interface,
                { option: 'superGlobalValues', target: 'session' },
                function(data){
                alert(data);
                    }
                );
            } else {
            alert("Response = false");  
            }
        }
    );
}
);

4 个答案:

答案 0 :(得分:0)

jquery上.post函数的结构是:

jQuery.post( url [, data] [, success(data, textStatus, jqXHR)] [, dataType] )

在这种情况下,您正在使用url,data和success函数,理论上jquery应该已经知道答案是json答案并评估对象的答案,但只是为了确保将代码更改为添加json数据类型:

$.post(
  $_interface,
  { option: 'login', userID: username, pwd: password },
  function(response){
    if (response) {
        // alert("Response = true");
        $.post(
            $_interface,
            { option: 'superGlobalValues', target: 'session' },
            function(data){
            alert(data);
                }
            );
        } else {
        alert("Response = false");  
        }
    }, "json"
);

如果这不起作用,只需评估答案,而不是做

function(data) {
  alert(data);
}

做类似

的事情
function(data) {
  my_json = eval(data);
  alert(my_json);
end

答案 1 :(得分:0)

  1. 检查php.ini中的magic_quotes_gpc和magic_quotes_runtime是否已关闭(使用搜索)
  2. 您也可以写下.htaccess:

    php_flag magic_quotes_gpc 0
    php_flag magic_quotes_runtime 0
    
  3. 您可以对所请求的数据使用php function stripslashes($ string)。

答案 2 :(得分:-1)

jQuery ajax对象有param dataType,可以设置为JSON,您将获得正确的解析响应作为对象。 例如:

$.ajax({
  type: 'POST',
  url: url,
  data: data,
  success: function(data){ //data contains parsed response, try to console.log this },
  dataType: 'json'
});

答案 3 :(得分:-1)

Vadim是对的,或者使用var myObj = JSON.parse(data)。