dongyuxin5353 2012-08-20 19:45
浏览 19
已采纳

jQuery | Ajax,如何从外部PHP文件中接收的数据操作数组键?

I have a script where ajax is being used to send password to a PHP file. The PHP file then checks if the password is correct and sends back a data of array with a link and succes code. When the data is received, I can clearly see the keys and values when I alert it, but how do I manipulate the key to get the value from it?

See below for an example how I use to communicate jQuery Ajax with PHP:

jQuery Ajax:

$.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")); 
    }
?>

When I alert data.link I get to see the following code:

function link() {
    [native code]
}
  • 写回答

3条回答 默认 最新

  • doufu9145 2012-08-20 20:22
    关注

    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]);         
        });
    

    The best solution of course should be to return a response of type text/json.

    This will make the data object of type object.

    Anyway - you should make your callbacks support both types like so

    $.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       
        });
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面