1

jQueryの「投稿」リクエストに送り返すphpで大きなデータ構造を作成しました。データは次の形式で届きます

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

データは、二重引用符がエスケープされた二重引用符で囲まれた文字列として返されます。URL ディレクトリ マーカーもエスケープされます。上記は、返される文字列のほんの一部です。

  • alert(data) の場合、アラート ボックスに文字列が表示されます。
  • alert(data[0]) の場合、「」が表示されます
  • alert(data[event]) の場合、 undefined が表示されます。

通常、ドット表記または配列表記を使用してデータにアクセスすることはできません。外側の二重引用符を取り除き、エスケープを解除する必要があると思います。データは配列で、一部の項目は単純な値、一部はオブジェクト、一部はオブジェクトの配列です。

返されたデータにアクセスするにはどうすればよいですか? 一部のオブジェクトが欠落していることがよくありますが、構造は常に同じです。

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、データ、および成功関数を使用しています。理論的には、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オブジェクトには、JSON に設定できる param dataType があり、オブジェクトとして正しく解析された応答を取得します。例:

$.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 に答える