未捕获您正在尝试解码无效的JSON字符串

时间:2013-08-21 16:44:36

标签: extjs extjs4

我有表格:

new Ext.form.FormPanel({ 
    bodyStyle:'padding: 10px',
    width:400,
    renderTo: Ext.query(".foo")[0], 
    id: 'login-form',   
    bodyStyle: 'padding:15px;',
    url:'1.php',
    items: [            
            {   xtype: 'textfield',
                fieldLabel: 'Login',
                name: 'login'           

            },
            {
                xtype: 'textfield',
                name: 'pass',           
                fieldLabel: 'Password',
                inputType: 'password'  

            }],
      buttons: [{                         
                text: 'Login',
                handler: function()
                  { Ext.getCmp('login-form')   
                        .getForm()              
                        .submit();
                }}]
    });

错误: 未捕获您正在尝试解码无效的JSON字符串:
* 注意:未定义的索引:在线传递C:\ xampp \ htdocs \ extjs \ 1.php *

为什么未定义?

 {
                    xtype: 'textfield',
                    name: 'pass',           // имя поля <input name=«pass»
                    fieldLabel: 'Password',
                    inputType: 'password'   // Не просто  textfield, а  password

                }

名: '通过'

我的php文件:

$pass = $_GET["pass"];
$json = '{"a":pass}';
echo json_decode($json);

2 个答案:

答案 0 :(得分:2)

错误消息说明了PHP中未定义的索引。默认情况下,使用POST请求发送Ext表单,因此您的代码应为:

$pass = $_POST['pass'];

如果你不知道使用什么HTTP方法(嘘,这很糟糕!),你甚至可以使用$_REQUEST代替。

此外,正如另一个答案所述,你的PHP的其余部分都是混乱的......你真正想做的是(看,我使用武力!):

echo json_encode(array('a' => $pass));

最后回答您的原始问题,您的javascript错误消息是您在Ext无法解码JSON响应时获得的错误消息。知道快速识别问题的来源是很好的。

答案 1 :(得分:1)

您的问题与ExtJS无关,而与PHP的JSON输出有关:

$pass = $_GET["pass"];
$json = '{"a":pass}';
echo json_decode($json);

可能应该是:

$pass = $_GET["pass"];
$json = '{"a": "' . $pass . '"}';

echo $json;

我假设pass是一个字符串而我没有消毒它。此外,您不想在PHP端进行解码,您只需要将已经编码的JSON转储到输出以供ExtJS使用。