1

我正在尝试从 extjs 将文件上传到 PHP。该文件正在正确上传,但 UI 卡住并引发以下错误:未捕获您正在尝试解码和无效的 JSON 字符串:

我已经搜索并找到了将 Content-type 标头设置为 text/html 的建议,但这不起作用。这是我的代码:

xtype:'form',
width:300,
bodyPadding:5,
frame:false,
items: [{
    xtype: 'filefield',
    name: 'csv',
    msgTarget: 'side',
    allowBlank: false,
    buttonOnly:true,
    anchor: '100%',
    buttonText: 'Import CSV',
    listeners: {
        'change': function(fb,v){
            var form = this.up('form').getForm();
            form.submit({
                url:'/Portal/parsecsv.php',
                standardSubmit:false,
                method:'PUT'
            })
        }
    }
}]

在 parsecsv.php 中,我只有:

<?php header('Content-type:text/html');?>

请协助。

4

3 回答 3

2

您正在传递一个无效的 Json 字符串。我在一开始就留下了问题,因为您可能只是没有将完整的 Json 字符串添加到您的问题中,我只在您粘贴的内容中突出显示:

'change': function(fb,v){

这不是有效的 Json。从您工作中的响应中删除 javascript 以获取有效的 Json 字符串。

于 2012-11-09T19:40:23.520 回答
1

JSON 的正确标头是

Content-type: application/json
于 2012-11-09T19:03:28.140 回答
1

问题已解决。问题是在文件上传时,ExtJS 默认需要 JSON 响应,但出于某种原因,ExtJS 将 JSON 响应包装在标签内。所以我必须做的是在 PHP 中将响应的内容类型设置为 text/html,然后在 ExtJS 中,将响应解析为字符串,而不是 JSON。此外,我发现在成功上传时,ExtJS 在表单提交时触发“失败”事件而不是“成功”事件。

于 2012-11-19T14:47:40.997 回答