1

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

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

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

  • 如果我警告(数据),我会在警告框中显示字符串。
  • 如果我 alert(data[0]) 我得到一个 " 显示
  • 如果我 alert(data[event]) 我得到未定义的显示。

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

如何访问返回的数据?尽管某些对象经常会丢失,但结构总是相同的。

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

4 回答 4

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 函数 stripslashes($string)。

于 2012-12-07T15:55:36.143 回答
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
于 2012-12-05T13:26:25.520 回答
-1

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

$.ajax({
  type: 'POST',
  url: url,
  data: data,
  success: function(data){ //data contains parsed response, try to console.log this },
  dataType: 'json'
});
于 2012-12-05T13:25:33.257 回答
-1

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

于 2012-12-05T13:28:20.377 回答