jQuery / PHP ajaxForm获取JSON编码结果

时间:2013-07-22 00:49:31

标签: php jquery json ajaxform

我得到了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是一个关联Array()


Firebug控制台说: enter image description here

不能弄清楚什么是错的。

非常感谢任何帮助。


firebug中的PHP输出/响应

enter image description here


Console.log(xhr)打印

enter image description here

5 个答案:

答案 0 :(得分: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);
},

答案 1 :(得分:2)

解开了这个谜团:

在建议试用console.log(xhr)的评论中使用 @Musa 中的提示,

我想出了这个。

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

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

    });

然而,

不知何故,$.each()的两个参数都返回key对的key=value。我以某种方式认为i应该是indexv循环的值$.each。这样我们就可以做到:v[i]。使用i作为索引来访问存储在v数组值中的值。

尽管如此,它仍可以 hackingly

答案 2 :(得分:0)

我认为在;声明之后你没有那个variable

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

答案 3 :(得分:0)

http://php.net/manual/en/function.json-encode.php Example#2一个json_encode()示例显示了一些正在使用的选项

尝试json_encode($ var,JSON_HEX_TAG);

if (!empty($sendOut)) {
    if (!preg_match('/table|td|error|warning/i', $sendOut)) {
        $outCollection["img_".$counter] = $sendOut;

        $counter++;
    }

    echo json_encode($outCollection, JSON_HEX_TAG);
}

P.S。下次尝试将代码添加为文本,而不是图像!

答案 4 :(得分:0)

此处的问题是 HTTP标头

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

只需在回显json编码的字符串之前添加它:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> <DebugType>pdbonly</DebugType> <Optimize>true</Optimize> <OutputPath>bin\</OutputPath> <DefineConstants>TRACE</DefineConstants> <ErrorReport>prompt</ErrorReport> <WarningLevel>4</WarningLevel> -<PackageAsSingleFile>false</PackageAsSingleFile> -<ExcludeGeneratedDebugSymbol>true</ExcludeGeneratedDebugSymbol> -<ExcludeApp_Data>true</ExcludeApp_Data> -<PublishDatabases>false</PublishDatabases> -<DeployIisAppPath>Partnerportal</DeployIisAppPath> -<DesktopBuildPackageLocation>obj\Release\Package\Project.zip</DesktopBuildPackageLocation> -<Prefer32Bit>false</Prefer32Bit> +<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> </PropertyGroup>