2

PHPファイルにパスワードを送信するためにajaxが使用されているスクリプトがあります。次に、PHP ファイルはパスワードが正しいかどうかをチェックし、配列のデータをリンクと成功コードと共に送り返します。データが受信されると、アラートを出すとキーと値がはっきりとわかりますが、キーを操作して値を取得するにはどうすればよいでしょうか?

jQuery Ajax と PHP の通信に使用する例については、以下を参照してください。

jQuery アヤックス:

$.ajax({
    type: "POST",
    url: "test.php",
    data: { pass: $("#pass-field").val() }
    }).done(function(data) {

        if(data.link != ""){
            alert("Link: " + data.link);
        }           
    });

PHP:

    if(strtolower($retrieved_password) == $original_password){
        echo json_encode(array("link" => "personal/cv.doc", "success" => "true")); 
    }else{
        echo json_encode(array("link" => "", "success" => "false")); 
    }
?>

data.link をアラートすると、次のコードが表示されます。

function link() {
    [native code]
}
4

3 に答える 3

2

使用方法は次のとおりです。

  • PHP
<?php

    ...

    if (strtolower($retrieved_password) === $original_password) {
        // Use 'print json_encode(array(...));' if your PHP version is less than 5.4.
        print json_encode([
            'link'       => 'personal/cv.doc',
            'success'    => 'true',
        ]);
    } else {
        // Use 'print json_encode(array(...));' if your PHP version is less than 5.4.
        print json_encode([
            'link'       => '',
            'success'    => 'false',
        ]);
    }

    ...

?>
  • jQuery
...

$.ajax({
    'data':       {
        'password': $('#password_input').val()
    },
    'success':    function (json_data) {
        if (json_data['success'] !== 'false') {
            alert(json_data['link']);
        }
    },
    'type':       'POST',
    'url':        '/path/to/php_script.php'
});

...

json_dataAJAX 呼び出しで が適切に返される場合、これは適切に機能するはずです。うまくいかない場合は、コンソールに変更alert(json_data['link']);して確認してください。console.log(json_data['link']);私の意見では、開発者ツールの方が優れているため、おそらく Chrome または Safari でこれを行う必要があります。出力のスクリーンショットを撮って投稿に追加することもできます。これにより、データがどのように戻ってくるかを確認できます。お役に立てれば。

于 2012-08-20T20:15:16.753 に答える
2

Your problem is that the response has text/html type on it.

The data variable in your done callback is of type String

You should do eval on it to turn it into an object.

Something like this

$.ajax({
    type: "POST",
    url: "test.php",
    }).done(function(data) {
        var dataObj = {};
        eval ("dataObj = " + data); 
        console.log([dataObj]);         
    });

もちろん、最善の解決策は、 type の応答を返すことですtext/json

これにより、タイプのデータ オブジェクトが作成されますobject

とにかく-コールバックが両方のタイプをサポートするようにする必要があります

$.ajax({
    type: "POST",
    url: "test.php",
    }).done(function(data) {
        var dataObj = null;

        switch ( typeof(data) ) {
            case "object" : { dataObj = data; break; }
            case "string" : { eval ("dataObj = " + data); break; }
            default : { throw "unsupported type [" + typeof(data) + "]"  }
        }

             //... more code here       
    });
于 2012-08-20T20:22:45.670 に答える
0

コードを見ると、オブジェクトの戻り値は次の形式であるように見えます。

{"リンク": ""、 "成功":"false"}

オブジェクトのプロパティ値にアクセスするには、以下を使用します。

data.linkおよび/またはdata.successobjectName.property

ちなみに、personal/cv.docは本当に保護されていません。ここに入力した内容に基づいて、パスワードなしでダウンロードできました。

于 2012-08-20T20:07:05.743 に答える