如何在sencha touch 2中使用外部Web服务

时间:2012-05-08 05:32:05

标签: web-services sencha-touch-2

我是sencha touch2的新手,我想在sencha touch2中使用外部Web服务。我已为此原因编写代码,显示警告消息无效!在控制台中给出错误,这样XMLHttpRequest无法加载http://localhost/SLS.BRND.Services/Service1.asmx/Helloworld?_dc=1336466078991&method=Helloworld&format=json

  

原则http://localhost:49692不被允许   访问控制允许来源。   app / view / Blog.js?_dc = 1336466047687:27Response状态: - 0

请帮我解决问题所在。谢谢

这是我的代码: -

   Ext.define("GS.view.Blog", {
    extend: 'Ext.navigation.View',
    xtype: 'blog',
    config: {
        title: 'WebService',
        scrollable: true,       
        items: [
            {
            xtype: 'button',
            text: 'Press Me',
            height: 40,
            width: 200,
            listeners: {
                tap: function () {
//                    alert("Hi Welcome To Sencha");
                    Ext.Ajax.request({
                        method: 'GET',
                        url: 'http://localhost/SLS.BRND.Services/Service1.asmx/Helloworld',
                        params: { method: 'Helloworld', format: 'json' },
                        success: function (response, request) {
                            alert('Working!')
                            alert(response.responseText)
                            console.log('Response:-' + response.responseText)
                        },
                        failure: function (response, request) {
                            alert('Not working!')
                            console.log('Response Status:- ' + response.status)
                        }
                   });
                }
            }
          }
        ]
    }
});

3 个答案:

答案 0 :(得分:0)

您可以使用eval函数将纯文本转换为JSON数据。

var newObject=eval('('+response.responseText+')');

答案 1 :(得分:0)

试试此代码

        Ext.data.JsonP.request({

                    url: 'http://localhost/SLS.BRND.Services/Service1.asmx/Helloworld',
                    params: { method: 'Helloworld', format: 'json' },
                    success: function (response) {
                        alert('Working!')
                        console.log(response);
                    },
                    failure: function (response) {
                        alert('Not working!')
                        console.log(response);
                    }
               });

答案 2 :(得分:0)

我想,我找到了解决问题的方法。

首先,请阅读Nicholas C. Zakas撰写的关于Cross-domain Ajax with Cross-Origin Resource Sharing的优秀文章。它清楚地解释了这个跨域跨域资源共享问题。

因此,在您的情况下,您需要发出JSONP请求。

  

JSONP或" JSON with padding"是对基本JSON数据的补充   格式,允许页面请求的使用模式等等   有意义地使用来自主服务器以外的服务器的JSON。

     

JSONP is an alternative to a more recent method called Cross-Origin Resource Sharing

您需要做的就是进行Ext.util.JSONP.request()这样的呼叫,

Ext.util.JSONP.request({
     url: 'http://localhost/SLS.BRND.Services/Service1.asmx/Helloworld',
     params: { 
         method: 'Helloworld',
         format: 'json',
         callback: 'callback',
     },

     success: function (response) {
           alert('Working!')
           console.log(response);
     },
     failure: function (response) {
            alert('Not working!')
            console.log(response);
     }
});

现在应该可以了!