原文地址:http://docs-origin.sencha.com/touch/2.2.0/#!/guide/ajax


Using AJAX with Sencha Touch

在st中使用AJAX

Contents

  1. Simple Requests with Ext.Ajax
  2. Cross-Domain Requests
  3. Form Uploads

Sencha Touch provides a variety of convenient ways to get data into and out of your application. All of the data-bound Components such as Lists,nested Lists,and DataViews use Stores,which are easily configured to fetch and save data to a large variety of sources. We will look at managing data with stores later on,but first let us start with how to generate simple AJAX requests.

st提供了很多种向应用导入导出数据的方式。所有的数据绑定组件,例如Lists、nested List及DataViews都使用了很容易配置的数据存储来从大量的数据源存取数据。我们稍后会看如何管理数据存储的数据,首先我们看下如何生成一个简单的ajax请求。

Simple Requests with Ext.Ajax

用Ext.Ajax发送简单的请求

Because of browser security restrictions,AJAX requests are usually made to urls on the same domain as your application. For example,if your application is found at http://myapp.com,you can send AJAX requests to urls such as http://myapp.com/login.PHP and http://myapp.com/products/1.json,but not to other domains such as http://google.com. However,Sencha Touch provides some alternatives to get around this limitation,as shown in the final part of this guide (Cross-Domain Requests and JSON-P).

由于浏览器安全策略的限制,ajax请求通常与你的应用使用相同的域。例如,如果你的应用建立在http://myapp.com, 你可以向这些url发送请求,http://myapp.com/login.PHP 、http://myapp.com/products/1.json,但是不能向其它域如http://google.com发送请求。然而,st提供了几种绕开该限制的方法,如该向导的最后一部分所述(Cross-Domain Request 和JSON-P).

The following code shows an AJAX request to load data from an url on the same domain:

下面的代码展示了向同一个域上的url请求数据:

Ext.Ajax.request({ url: 'myUrl', callback function(options success response) { consolelogresponseresponseText);}});

Assuming that your app is on http://myapp.com,the prevIoUs code sends a GET request to http://myapp.com/myUrl. Since AJAX calls are asynchronous,once the response comes back,the callback function is called with the response. In this example the callback function logs the contents of the response to the console when the request has finished.

假设你的app在http://myapp.com上,上面的代码向http://myapp.com/myUrl发送了一个get请求。尽管AJAX调用是异步的,一旦响应返回,callback函数就会被调用。在这个例子中,当请求结束时,callback函数会将响应的内容打印出来。

AJAX Options

AJAX配置项

Ext.Ajaxtakes a wide variety of options,including setting the method (GET,POST,PUT,or DELETE),sending headers,and setting params to be sent in the url. The following code sets the method such that a POST request is sent instead of a GET:

Ext.Ajax有大量的配置项,包括设置请求方法(GET、POST、PUT 或者DELETE),请求头,url中要发送的参数。下面的代码设置了请求的方法为POST而不是GET:

 method'POST' Sending parameters done as shown in the following example: 

发送参数如下面的代码所示:

params
username'Ed' password'not a good place to put a password'},sans-serif; font-size:12.800000190734863px; line-height:19.5px"> When setting parameters like in this example,the request is automatically sent as a POST with the params object sent as form data. The prevIoUs request above is like submitting a form with username and password fields.

当像上面的例子所示设置参数时,请求会自动将参数作为表单数据发送一个post请求。上面的请求提交了一个有username和password字段的表单。

If we wanted to send this as a GET request instead,we would have to specify the method again,in which case our params are automatically escaped and appended to the url:

如果我们想将上述请求改为get请求,我们需要再次指定method方法,这时我们的参数会自动过滤并追加到url后:

'GET'
'bad place for a password' The prevIoUs code sample generates the following request:

上面的代码生成了如下的请求:

http://mywebsite.com/myUrl?_dc=1329443875411&username=Ed&password=bad%20place%20for%20a%20password

You may have noticed that our request created an url that contained "_dc=1329443875411". When you make a GET request like this,many web servers cache the response and send you back the same response every time you make the request. Although this speeds the web up,it is not always what you want. In fact in applications this is rarely what you want,so we "bust" the cache by adding a timestamp to every request. This tells the web server to treat it like a fresh,uncached request.

你可能会发现我们的请求创建了一个包含“_dc=1329443875411”参数的url。当你像上面这样创建一个get请求时,很多web服务器会缓存该响应并在每次接到该请求时都返回你相同的响应。尽管这提供了web访问速度,但是它并不总是你想要的。事实上,在应用程序中,这几乎不是你想要的,因此我们通过为每一个请求添加时间戳来禁用缓存。这告诉web服务器它是一个新的、不缓存的请求。

If you want to turn this behavior off,we cCould set disableCaching to false,as shown in the following code sample:

如果你想关闭该功能,可以设置disableCaching 为false,如下面的代码所示:

 disableCaching
false Since the request no longer contains the cache busting string,it looks like the following string:

因为请求不再包含缓存字符串,请求url如下所示:

//mywebsite.com/myUrl?username=Ed&password=bad%20place%20for%20a%20password

Sending Headers

发送头信息

Another option related to customizing the request is the headers option. This enables you to send any custom headers to your server,which is often useful when the web server returns different content based on these headers. For example,if your web server returns JSON,XML,or CSV based on the header it is passed,we can request JSON like in the following example:

请求的另一个可配置项时头信息。这让你能够将任何客户头信息发送给服务器,这在服务器依据不同的头信息返回不同的内容时很有用。例如,如果你的web服务器依据头信息返回json、xml或者csv时,我们可以像下面这样请求json:

 headers"Content-Type""application/json" If you create a request like this and inspect it in Firebug/web inspector,you will see that the Content-Type header has been set to application/json. Your web server can pick up on this and send you the right response. You can pass any number of headers you like into the headers option. 

如果你像上面那样创建了一个请求,并在firebug、web监视器中查看,你可以看到Content-Type头被设置成了application/json。你的web服务器能够获得该信息并给你正确的响应。你可以在headers配置中传递任意数量的头信息。

Callback Options

回调功能

Not every AJAX request succeeds: sometimes the server is down,or your internet connection drops,or something else bad happens.Ext.Ajaxallows you to specify separate callbacks for each of these cases:

不是每一个的ajax请求都会成功:有时,服务器挂了或者网络连接断了亦或者发生了其它一些事。Ext.Ajax允许你为不同的情况指定回调函数:

(
"Spiffing,everything worked" failure"Curses,something terrible happened" These do exactly what you would expect them to do,and hopefully most of the time it is your success callback that gets called. It is pretty common to provide a success callback that updates the UI or does whatever else is needed by the application flow,and a failure handler that either resends the request or alerts the user that something went wrong.

这会根据你的意愿去做正确的处理,并且通常情况下会调用success回调函数。提供一个success回调函数来更新ui或者做一些其它必要的事情、一个failure回调函数处理重新请求或者给用户弹出一个错误提示窗口是相当不错的做法。

You can providesuccess/failureandcallbackat the same time,so for this request thesuccessfunction is called first (if everything was ok),followed by the maincallbackfunction. In the case of failure,thefailurefunction is called first,followed bycallback:

你也可以同时提供success/failure和callback,这种情况下,如果一切正常,该请求会首先调用success方法然后调用callback,在失败的情况下,会先调用failure方法再调用callback方法:

"It is what it is"
});

Timeouts and Aborting Requests

超时和废弃请求

Another way requests can fail is when the server took too long to respond and the request timed out. In this case yourfailurefunction is called,and the request object it is passed has the timedout variable set to true:

请求失败的另一种情况是服务器需要很长时间响应导致请求超时。在这种情况下,failure方法被调用,传递的请求对象的timedout参数被设为true:

timedout // logs true By default the timeout threshold is 30 seconds,but you can specify it for every request by setting the timeout value in millisecond. In the following case the request will give up after 5 seconds: 

默认情况系下,超时阈值为30s,但是你可以设置timeout参数为多少毫秒来指定每一个请求的超时阈值。在下面的例子中,请求会在5s后放弃:

 timeout
5000 It is also possible to abort requests that are currently outstanding. In order to do this,you need to save a reference to the request object thatExt.Ajax.requestreturns,sans-serif; font-size:12.800000190734863px; line-height:19.5px"> 废弃当前尚未完成的请求也是可能的。为了达到这个目的,你需要保存对请求对象的引用,即Ext.Ajax.request返回的对象,如下所示:
var myRequest = aborted
}); abortmyRequest);

This time the failure callback is called and its response.aborted property is set. You can use all of the error handling above in your apps:

这一次,failure方法会被调用,并且response.aborted参数会被设置。你可以在你的app中使用下面所有的错误处理:

if Msgalert'Timeout'"The server timed out :("else'Aborted'"Looks like you aborted the request"'Bad'"Something went wrong with your request"});

Cross-Domain Requests

跨域请求

A relatively new capability of modern browsers is calledCORS,which stands for Cross-Origin Resource Sharing. This allows you to send requests to other domains,without the usual security restrictions enforced by the browser. Sencha Touch provides support for CORS,although you will probably need to configure your web server in order to enable it. If you are not familiar with the required actions for setting up your web server for CORS,a quick web search should give you plenty of answers.

现代浏览器的一个相对比较新的功能叫CORS,代表Cross-Origin Resource Sharing(跨域资源共享)。这允许你撇开浏览器的安全策略要求向其他的域发起请求。st对cors提供了支持,但是你需要配置你的服务器以允许它。如果你对配置web服务器允许cors不熟,一个快速的检索将给你很多答案。

Assuming your server is set up,sending a CORS request is easy:

假设你的服务器已经配置好了,发送一个cors请求是很简单的:

'http://www.somedomain.com/some/awesome/url.PHP' withCredentialstrue useDefaultXhrHeaderfalse});

Form Uploads

表单上传

The final topic covered in this guide is uploading forms,a functionality that is illustrated in the following sample code:

本向导包含的最后一个话题 是表单上传,如下代码所示的功能:

 form'myFormId'success'Success''We got your form submission''Fail''Hmm,that did not work' This finds a <form> tag on the page with id="myFormId",retrieves its data and puts it into the request params object,as shown at the start of this guide. Then it submits it to the specified url and calls your callbacks like normal. 

这会寻找页面上id = “myFormId”的<form>标签,检索表单里的数据并将其放入请求的params参数,如本篇开始里所提到的样。然后会跟正常情况下样提交到指定的url并执行callback回调函数。


昨晚的今天来补上!

第十五天Using AJAX with Sencha Touch的更多相关文章

  1. 详解使用postMessage解决iframe跨域通信问题

    这篇文章主要介绍了详解使用postMessage解决iframe跨域通信问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  2. html5录音功能实战示例

    这篇文章主要介绍了html5录音功能实战示例的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  3. ios – CLGeocoder错误. GEOErrorDomain代码= -3

    有没有关于apple的地理编码请求的文档?谢谢你提前.更新这是我的整个代码请求解决方法在搜索到答案后,它在Apples文档中!

  4. 应用程序关闭时的iOS任务

    我正在构建一个应用程序,通过ajax将文件上传到服务器.问题是用户很可能有时不会有互联网连接,并且客户希望在用户重新连接时安排ajax调用.这可能是用户在离线时安排文件上传并关闭应用程序.应用程序关闭时可以进行ajax调用吗?

  5. ios – 调用异步方法的方法的单元测试

    我想我有这些代码行:我想为该代码编写一个单元测试.对于initializeHomeData和initializeAnythingElse,我可以编写单元测试,如:我的问题是,如何测试reset()?我应该在testReset()中调用它们,如:但我认为这不是适当的实施.解决方法你是对的.要测试重置,您需要调用reset,而不是内部方法.话虽这么说,重置目前的编写方式使其不可测试.您能够如此轻松地测

  6. swift - The Facade Pattern

    Facade(外观)模式为子系统中的各类提供一个简明一致的界面,隐藏子系统的复杂性,使子系统更加容易使用。

  7. swift - The Proxy Pattern

    我在实际工作中vc也仿照过Foundation的delegate:button:内涵业务逻辑,底层实现;每个button是一个类,业务逻辑需要未知的参数和处理之后未知的结果反馈UI:点击button之后界面的改变,UI实现未知的参数和未知的结果反馈,也就是实现这个代理这样以来UI的定制,很灵活很容易,代码思路依然清晰如初。哪个是主体哪个是代理并不重要关键是看定义所说whichisusedwhenanobjectisrequiredtoactasaninterfacetoanotherobjectorres

  8. swift开发笔记9 - 正向和反向页面传参

    在storyboa里segue是这样的:首先看考勤页面(主页面)如何给备注页面传参:在考勤页面(主页面)的viewcontroller中找到prepareForSegue方法,这个方法由xcode自动生成,用于在使用segue跳转前,做一些处理动作:实际上是通过修改segue的目标页面的某个类属性,从而达到传参的目的。

  9. [快速学会Swift第三方库] Kingfisher篇

    [快速学会Swift第三方库]Kingfisher篇Kingfisher是一个轻量的下载和缓存网络图片库。也可以利用kf_setimageWithURL函数的返回值来进行更多的管理操作下载器自定义下载器参数缓存系统自定义缓存参数预取将一些图片在显示到屏幕上之前,先预取到缓存。动态图片加载动态图片只需要加上一行代码,设置imageView为AnimatedImageView,不设置也能加载,但是在动态图片较大的时候推荐进行该设置。深入学习这里列出了Kingfisher大多数操作,如果想要深入学习Kingfi

  10. swift 闭包的使用

    使用:定义:

随机推荐

  1. xe-ajax-mock 前端虚拟服务

    最新版本见Github,点击查看历史版本基于XEAjax扩展的Mock虚拟服务插件;对于前后端分离的开发模式,ajax+mock使前端不再依赖后端接口开发效率更高。CDN使用script方式安装,XEAjaxMock会定义为全局变量生产环境请使用xe-ajax-mock.min.js,更小的压缩版本,可以带来更快的速度体验。

  2. vue 使用 xe-ajax

    安装完成后自动挂载在vue实例this.$ajaxCDN安装使用script方式安装,VXEAjax会定义为全局变量生产环境请使用vxe-ajax.min.js,更小的压缩版本,可以带来更快的速度体验。cdnjs获取最新版本点击浏览已发布的所有npm包源码unpkg获取最新版本点击浏览已发布的所有npm包源码AMD安装require.js安装示例ES6Module安装通过Vue.use()来全局安装示例./Home.vue

  3. AJAX POST数据中文乱码解决

    前端使用encodeURI进行编码后台java.net.URLDecoder进行解码编解码工具

  4. Koa2框架利用CORS完成跨域ajax请求

    实现跨域ajax请求的方式有很多,其中一个是利用CORS,而这个方法关键是在服务器端进行配置。本文仅对能够完成正常跨域ajax响应的,最基本的配置进行说明。这样OPTIONS请求就能够通过了。至此为止,相当于仅仅完成了预检,还没发送真正的请求呢。

  5. form提交时,ajax上传文件并更新到&lt;input&gt;中的value字段

  6. ajax的cache作用

    filePath="+escape;},error:{alert;}});解决方案:1.加cache:false2.url加随机数正常代码:网上高人解读:cache的作用就是第一次请求完毕之后,如果再次去请求,可以直接从缓存里面读取而不是再到服务器端读取。

  7. 浅谈ajax上传文件属性contentType = false

    默认值为contentType="application/x-www-form-urlencoded".在默认情况下,内容编码类型满足大多数情况。在这里,我们主要谈谈contentType=false.在使用ajax上传文件时:在其中先封装了一个formData对象,然后使用post方法将文件传给服务器。说到这,我们发现在JQueryajax()方法中我们使contentType=false,这不是冲突了吗?这就是因为当我们在form标签中设置了enctype=“multipart/form-data”,

  8. 909422229_ajaxFileUpload上传文件

    ajaxFileUpload.js很多同名的,因为做出来一个很容易。我上github搜AjaxFileUpload出来很多类似js。ajaxFileUpload是一个异步上传文件的jQuery插件传一个不知道什么版本的上来,以后不用到处找了。语法:$.ajaxFileUploadoptions参数说明:1、url上传处理程序地址。2,fileElementId需要上传的文件域的ID,即的ID。3,secureuri是否启用安全提交,默认为false。4,dataType服务器返回的数据类型。6,error

  9. AJAX-Cache:一款好用的Ajax缓存插件

    原文链接AJAX-Cache是什么Ajax是前端开发必不可少的数据获取手段,在频繁的异步请求业务中,我们往往需要利用“缓存”提升界面响应速度,减少网络资源占用。AJAX-Cache是一款jQuery缓存插件,可以为$.ajax()方法扩展缓存功能。

  10. jsf – Ajax update/render在已渲染属性的组件上不起作用

    我试图ajax更新一个有条件渲染的组件。我可以确保#{user}实际上是可用的。这是怎么引起的,我该如何解决呢?必须始终在ajax可以重新呈现之前呈现组件。Ajax正在使用JavaScriptdocument.getElementById()来查找需要更新的组件。但是如果JSF没有将组件放在第一位,那么JavaScript找不到要更新的内容。解决方案是简单地引用总是渲染的父组件。

返回
顶部