【问题标题】:Uncaught You're trying to decode an invalid JSON String未捕获您正在尝试解码无效的 JSON 字符串
【发布时间】:2013-08-21 16:44:36
【问题描述】:

我有表格:

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);

【问题讨论】:

  • 如果你用英文注释你的代码会很有帮助...
  • 拜托,他的cmets对他的问题没有任何用处......

标签: extjs extjs4


【解决方案1】:

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

$pass = $_POST['pass'];

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

此外,正如另一个答案中所述,您的 PHP 的其余部分被打乱了......您真正想要做的是(看,我使用武力!):

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

最后回答您最初的问题,您的 javascript 错误消息是您在 Ext 无法解码 JSON 响应时收到的错误消息。这对于快速确定问题的来源非常有用。

【讨论】:

  • ... 并非总是如此?您可以自行决定是通过邮寄还是通过获取方式发送表单
  • @JeffShaver 你是对的,忘记了“默认”部分。现已修复,谢谢。
  • 谢谢!!我很高兴。提交时如何重定向到1.php?
【解决方案2】:

您的问题与 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 使用。

【讨论】:

  • 感谢您的帮助。
猜你喜欢
  • 2017-02-02
  • 2012-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-13
  • 1970-01-01
相关资源
最近更新 更多