【问题标题】:Can't use the array that php returns [duplicate]无法使用php返回的数组[重复]
【发布时间】:2013-09-01 00:40:48
【问题描述】:

我得到一个从 PHP 返回的数组,我首先在 php 中使用 json_encode() 并回显该数组。我得到了一个 AJAX 请求禁用“异步”的数组。我知道我不应该使用它,但这是我能找到的唯一方法。

它返回给我这个:

{"id":"38","name":"111111111111111111111111111111111111111111111.jpg"}

这是我的 AJAX 请求:

function uploadFile(file){
    var formData = new FormData();
    formData.append('formData', file);
    $.ajax({
        url: 'inc/ajax/uploadFile.php',  //Server script to process data
        type: 'POST',
        data: formData,
        contentType: false,
        processData: false,
        async:   false,
        //Ajax events
        success: function(html){
            strReturn = html;
        }
    });
    return strReturn;
}

当我这样做时,我得到了整个数组:

var img = uploadFile(file);
console.log(img);

但当我调用“img.name”或 img.id”时,它会显示未定义。

【问题讨论】:

  • 要使这个异步运行,只要在你的 AJAX 调用的 success 回调中运行任何期望来自 uploadFile 函数的输出的代码。这样代码在数据可用时运行,您不必锁定浏览器来执行此操作。
  • 请不要async:false

标签: php javascript jquery ajax arrays


【解决方案1】:

您将收到一个对象的 JSON 字符串表示形式。告诉 jQuery 你期待 JSON,以便它为你将其解析为实际的 Javascript 对象:

data: formData,
dataType: 'json', // Add this line

【讨论】:

  • 非常感谢这个工作!
  • @Xegano 不客气。顺便说一句,你可以并且应该,一定要听从其他人给你的建议,关于删除async: false。总是可以做到的,您只需要了解回调以及函数在 Javascript 中是 first-class citizens 的事实。
【解决方案2】:

您需要将 dataType 设置为 json,并且应该在填充之前使用可能返回的回调 strReturn

function uploadFile(file,callback){
    var formData = new FormData();
    formData.append('formData', file);
    $.ajax({
        url: 'inc/ajax/uploadFile.php',  //Server script to process data
        type: 'POST',
        data: formData,
        contentType: false,
        processData: false,
        dataType: "json",
        //Ajax events
        success: function(html){
            strReturn = html;
            callback(strReturn);
        }
    });
}

uploadFile(file,function(img){
    console.log(img.name);
});

【讨论】:

    【解决方案3】:

    试试这个:

    function uploadFile(file){
        var formData = new FormData();
        formData.append('formData', file);
        $.ajax({
            url: 'inc/ajax/uploadFile.php',  //Server script to process data
            type: 'POST',
            data: formData,
            contentType: false,
            dataType: "json",
            processData: false,
            //Ajax events
            success: function(html){
                strReturn = html;
                return strReturn;
            }
        });
    }
    

    它说 undefined 因为 strReturn 在你返回它的那一刻没有定义。 ajax 的成功方法会延迟几毫秒调用,因此您必须在 ajax 完成后返回您的变量。

    【讨论】:

    • 对不起。我只是从上面复制了代码并添加了必要的内容。
    • 这无论如何都行不通。您的return 语句不是从uploadFile 返回,而是从匿名成功回调函数返回。所以var result = uploadFile(whatever) 仍然不会得到正确的结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-07
    • 2018-04-04
    • 2013-02-25
    • 2011-03-27
    • 2015-06-28
    • 2012-08-05
    • 1970-01-01
    相关资源
    最近更新 更多