jQuery/PHP ajaxForm 获取 JSON 编码结果

3

I got this code for the Form:

jQuery

 $('#form').ajaxForm({
    beforeSend: function () {
        bar.width(0);
    },
    uploadProgress: function (event, position, total, percentComplete) {

        var percentCompleted = percentComplete + '%';
        bar.width(percentCompleted)
        bar.text(percentCompleted)
        console.log(percentCompleted);
        ///The Console logs properly.
    },

    complete:
    //------------------------------------
    //THIS IS WHERE LIES PROBLEM IS
    //------------------------------------
    function (xhr) {
        //How do you convert the xhr to JSON?

        //I tried :
        var out = JSON.parse(xhr)
        // and :
        var out2 = $.parseJSON(xhr)

        console.log('Completed1: ' + out);
        console.log('Completed2: ' + out2);
    },
    error: function (xhr, desc, err) {
        console.log(xhr)
        console.debug(xhr);
        console.log("Desc: " + desc + "\nErr:" + err);
    }

});

PHP类似于:

enter image description here

enter image description here

$OutCollection是一个关联型数组()


Firebug控制台显示: enter image description here

无法确定究竟有什么问题。

非常感谢任何帮助。


PHP在firebug中的输出/响应

enter image description here


Console.log(xhr)打印

enter image description here


你能给我们提供 PHP 脚本的一个示例输出吗? - Travis DePrato
也许 xhr 已经是一个对象了。尝试使用 console.log(xhr) 查看一下结果。 - Musa
请查看 console.log(xhr) 的结果... 再次感谢。 - ErickBest
4个回答

3

看起来xhf是一个XMLHttpRequest对象,因此responseText属性将包含您的json。

function (xhr) {
    //How do you convert the xhr to JSON?

    //I tried :
    var out = JSON.parse(xhr.responseText)
    // and :
    var out2 = $.parseJSON(xhr.responseText)

    console.log('Completed1: ', out);
    console.log('Completed2: ', out2);
},

2

解决了谜团:

根据评论中@Musa的提示,建议尝试console.log(xhr)

我想到了这个方法。

var out=$.parseJSON(xhr.responseText);

     $.each(out,function(i,v){
    //then:
    console.log(out[i]) //to access each piece of the information.

    });

然而,

不知何故,$.each() 的两个参数都返回了 key=value 对的 key。我一开始认为 i 应该是 $.each 循环的索引,而 v 则是值,这样我们就可以使用 i 作为索引访问存储在 v 值数组中的值,代码如下: v[i]

尽管这种方法可以“hack”过去。


0

我认为你在变量声明后没有添加那个分号 ;,像这样:

 var out= JSON.parse(xhr);
 var out2= $.parseJSON(xhr);

即使只有一个变量,例如:var out= JSON.parse(xhr);,我仍然会收到错误信息... - ErickBest

0

这里的问题是HTTP头

我们需要让浏览器认为接收到的数据是json,这样你就不需要将返回的字符串解析为json了。

只需要在输出json编码字符串之前添加以下内容:

header("Content-type: application/json");


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接