从Sencha Touch Ext.data.JSONP.request响应中获取变量

时间:2013-07-22 04:10:22

标签: html5 sencha-touch sencha-touch-2 jsonp sencha-architect

我正在尝试从对Ext.data.JsonP.request的响应中获取布尔值(成功)和HTML字符串(结果),但我无法弄清楚如何。这是我到目前为止的代码:

Ext.data.JsonP.request({
    url: 'http://wereani.ml/shorten-app.php',
    callbackKey: 'callback',
    params: {
        data: Ext.encode(values)
    },
    success: function(response) {
        console.log(response);
        console.log(JSON.stringify(values));
        console.log('Link Shortened');
        if(response.responseText['success'] == true) {
        Ext.Msg.alert('Link Shortened', response.responseText, Ext.emptyFn);
        } else {
            Ext.Msg.alert('Error', response.responseText, Ext.emptyFn);
        }
        form.reset();
    },
    failure: function(response) {
        console.log(response);
        console.log(JSON.stringify(values));
        console.log('Error');
        Ext.Msg.alert('Error', 'Please try again.', Ext.emptyFn);
    }
});

一些示例JSON-P:

callback({"success":false,"result":"<div class=\"error\">Please enter a valid link to shorten!<\/div>"})

我目前得到的错误是Uncaught TypeError: Cannot read property 'success' of undefined。 在此先感谢您的帮助!

编辑:似乎虽然responseObject {success: false, result: "<div class="error">Please enter a valid link to shorten!</div>"},但response.responseTextundefined。我使用了错误的变量吗?我在response上找不到任何文档。

编辑2:似乎Console.log(response.responseText)返回undefined的原因是因为它....我传递的JsonP编码变量(successresult)被自动解析到对象中,并且response.responseText从未创建过(尽管我认为应该是这样)。解决方案是直接阅读response.successresponse.result

答案:这是有效的代码。感谢Viswa的帮助!

Ext.data.JsonP.request({
    url: 'http://wereani.ml/shorten-app.php',
    callbackKey: 'callback',
    params: {
        data: Ext.encode(values)
    },
    success: function(response) {
        if(response.success === true) {
            Ext.Msg.alert('Link Shortened', response.result, Ext.emptyFn);
        } else {
            Ext.Msg.alert('Error', response.result, Ext.emptyFn);
        }
        form.reset();
    },
    failure: function(response) {
        console.log('Error');
        Ext.Msg.alert('Error', '<div class="error">Please try again.</div>', Ext.emptyFn);
    }
});

1 个答案:

答案 0 :(得分:2)

试试这个

Ext.data.JsonP.request({
    url: 'http://example.com/script.php',
    callbackKey: 'callback',
    params: {
        data: Ext.encode(values)
    },
    success : function(response) {
      console.log("Spiffing, everything worked");
      // success property
      console.log(response.success);
      // result property
      console.log(response.result);
   },
   failure: function(response) {
        console.log(response);
        Ext.Msg.alert('Error', 'Please try again.', Ext.emptyFn);
    }
});