2

我有一个脚本,其中使用 ajax 将密码发送到 PHP 文件。然后 PHP 文件检查密码是否正确,并发送回带有链接和成功代码的数组数据。收到数据后,alert的时候可以清楚的看到key和value,但是如何操作key从中获取value呢?

请参阅下面的示例,了解我如何使用 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_data如果在 AJAX 调用中正确返回,这应该可以正常工作。如果它不起作用,请尝试更改alert(json_data['link']);console.log(json_data['link']);检查您的控制台。在我看来,您可能希望在 Chrome 或 Safari 中这样做,因为开发人员工具对它们更好。您甚至可以尝试截取输出的屏幕截图并将其添加到您的帖子中,这样我们就可以看到数据是如何返回给您的。希望这可以帮助。

于 2012-08-20T20:15:16.753 回答
2

您的问题是响应上有text/html类型。

回调中的data变量是 String 类型done

您应该eval对其进行操作以将其变成一个对象。

像这样的东西

$.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

查看您的代码,对象返回似乎采用以下格式。

{“链接”:“”,“成功”:“假”}

要访问对象的属性值,请使用以下内容。

data.link和/或data.success( objectName.property)

顺便说一句,personal/cv.doc并没有真正受到保护。根据您在此处输入的内容,我可以在没有密码的情况下下载它。

于 2012-08-20T20:07:05.743 回答