ホームページ > 記事 > ウェブフロントエンド > Jquery ajax 基本tutorial_jquery
jQuery の Ajax は、更新を必要としない Web ページ革命をもたらします。ここでは、jQuery に関係する Ajax 操作について詳しく説明します。 (特別な手順は必要ありません。サーバーの設定が必要です。ここでは Tomcat 7 を使用しています)
1. リクエストに基づいてファイル データをロードします
ここでのリクエストは通常、クリックなどの Web ページ上の特定の操作です。
ロードされるデータのタイプは、次の 4 つのタイプに分類されます: a. HTML ファイルのロード; c. XML ファイルのロード。
対応する 4 つの読み込みメソッドは、load、getJSON、getScript、get です。
a. HTML ファイルをロードします
作成した HTML ファイルを Web ページに読み込みます。例:
//load方法加载html文件 $('#letter-a a').click(function(){ $('#dictionary').load('a.html'); return false; });
ここでの a.html も、サーバー側に配置された事前に作成されたページ ファイルです。load を直接呼び出すと、一致したターゲットに HTML コンテンツを読み込むことができます。
b. JSON ファイルをロードします
準備した JSON ファイルを Web ページに読み込みます。例:
//加载json文件 $('#letter-b a').click(function(){ $.getJSON('b.json',function(data){ var html = ''; $.each(data,function(entryIndex, entry){ html += "<div class='entry'>"; html += "<h3 class='term'>" + entry.term + "</h3>"; html += "<div class='part'>" + entry.part + "</div>"; html += "<div class='definition'>"; html += entry.definition; if(entry.quote){ html += '<div class="quote">'; $.each(entry.quote, function(lineIndex, line){ html += '<div class="quote-line">' + line + '</div>'; }); if(entry.author){ html += '<div class="quote-author">' + entry.author + '</div>'; } } html += "</div>"; html += "</div>"; }); $('#dictionary').html(html); }); return false; });
getJSON メソッドの最初のパラメータはロードされたファイルのパスを参照し、2 番目のパラメータはロード完了後のコールバック関数です。このコールバック関数を通じて、ロードされたデータを操作できます。繰り返し部分はループごとに処理されます。最後に、html メソッドを使用して、アセンブルされた HTML 文字列をターゲット id=dictionary の要素に追加します。
c. Javascript ファイルをロードします
JavaScript ファイルのロードは、HTML ファイルのロードと似ています。ここで注意する必要があるのは、getScript メソッドを使用してロードされた Javascript は、現在の Javascript 環境に従って直接実行されるということです。例:
//执行脚本 $('#letter-c a').click(function(){ $.getScript('c.js'); return false; });
d. XML ファイルをロードします
get メソッドを使用して、jQuery に XML ファイルをロードできます。例:
//加载XML文档 $('#letter-d a').click(function(){ $.get('d.xml',function(data){ $('#dictionary').empty(); $(data).find('entry').each(function(){ var $entry = $(this); var html = '<div class="entry">'; html += '<h3 class="term">' + $entry.attr('term') + '</h3>'; html += '<div class="part">' + $entry.attr('part') + '</div>'; html += '<div class="definition">'; html += $entry.find('definition').text(); var $quote = $entry.find('quote'); if($quote.length) { html += '<div class="quote">'; $quote.find('line').each(function(){ html += '<div class="quote-line">'; html += $(this).text() + '</div>'; }); if($quote.attr('author')){ html += '<div class="quote-author">'; html += $quote.attr('author') + '</div>'; } html += '</div>'; } html += '</div>'; html += '</div>'; $('#dictionary').append($(html)); }); }); return false; });
XML ファイルの特徴の 1 つは、jQuery を使用して HTML を操作するのと同じように、XML 要素を操作できることです。 attr メソッドや text メソッドなどを使用するなど。
2. Get メソッド
に基づいてサーバーからデータを取得します。前の例はすべて、サーバーからデータ ファイルを静的に取得しました。 Ajax の価値はこれに限定されません。get メソッドを通じてサーバーからデータを動的に取得するため、更新せずに Web ページを実現するのに非常に役立ちます。
次に、get メソッドを使用して、サーバーから必要なデータを取得します。ここではJ2EEのStruts2フレームワークとTOMCATを組み合わせてサーバーサイドを構築しました。具体的なサーバー側は多様で、php apache であってもその他のものであっても構いません。
ユーザーが Eavesdrop をクリックすると、get メソッドがサーバーに送信され、Eavesdrop データが取得され、json 値が返され、jQuery でアセンブルされます。
コードは次のとおりです:
//GET方法加载服务器内容 $('#letter-e a').click(function(){ var requestData = {term:$(this).text().toUpperCase()}; $.get('EGet.action', requestData, function(data){ //返回的数据包结构根据Struts2配置如下: //{"resultMSG":"{ 内部另一个json结构 }","success":"true"} //先将返回的数据包拆包 var responseObj = eval("("+data+")"); if(responseObj.success == 'true') { $('#dictionary').empty(); //返回成功,接下来再次解包resultMSG var dataObj = eval("("+responseObj.resultMSG+")"); var html = ""; html += "<div class='entry'>"; html += "<h3 class='term'>" + dataObj.term + "</h3>"; html += "<div class='part'>" + dataObj.part + "</div>"; html += "<div class='definition'>"; html += dataObj.definition; if(dataObj.quote){ html += '<div class="quote">'; $.each(dataObj.quote, function(lineIndex, line){ html += '<div class="quote-line">' + line + '</div>'; }); if(dataObj.author){ html += '<div class="quote-author">' + dataObj.author + '</div>'; } } html += "</div>"; html += "</div>"; $('#dictionary').html(html); } else { var $warning = $('<div>Sorry, your term was not found!</div>'); $('#dictionary').html($warning); } }); return false; });
ここで説明する必要があるのは、struts2 の設定により、返されるときに、必要なデータに加えて別のパッケージング層が存在するということです。これは、結果の内容を表すために使用される resultMSG と、Ajax がアクセスしたかどうかを示す成功フィールドです。成功です。したがって、2 つの eval unpacking が使用されました。
ここで私のバックグラウンド Java プログラムが渡すのは、設定された HTML ではなく、JSON タイプのデータだけです。Java レベルで HTML を書いて送信することは、データを直接渡すことほど便利ではなく、変更することもそれほど便利ではないと思います。将来的にスタイルやページ構造を変更する場合は、JavaScript を直接変更すると便利です。
get メソッドを使用してサーバー データを取得することは、次のリクエストをサーバーに送信することと同じです: EGet.action?term=XXX
Java バックグラウンド ファイルのコードは以下でリリースされています:
1.EGet.java
package lhb; import com.opensymphony.xwork2.ActionSupport; public class EGet extends ActionSupport { private String term; private Terms sampleTerm; private String success; private String resultMSG; /** * */ private static final long serialVersionUID = 1L; public String execute() throws Exception { initData(); if(term.equals(sampleTerm.getTerm())) { success = "true"; resultMSG = "{\"term\": \""+sampleTerm.getTerm()+"\","+ "\"part\": \""+sampleTerm.getPart()+"\","+ "\"definition\": \""+sampleTerm.getDefinition()+"\","+ "\"quote\": ["+ "\"Is public worship, then, a sin,\","+ "\"That for devotions paid to Bacchus\","+ "\"The lictors dare to run us in,\","+ "\"And resolutely thump and whack us?\""+ "],"+ "\"author\": \""+sampleTerm.getAuthor()+"\"}"; } else{ success = "false"; resultMSG = "fail"; } return SUCCESS; } //初始化数据 private void initData() { String partEAVESDROP = "v.i."; String definitionEAVESDROP = "Secretly to overhear a catalogue of the crimes and vices of another or yourself."; String quoteEAVESDROP[] = {"A lady with one of her ears applied", "To an open keyhole heard, inside,", "Two female gossips in converse free —", "The subject engaging them was she.", "\"I think,\" said one, \"and my husband thinks", "That she's a prying, inquisitive minx!\"", "As soon as no more of it she could hear", "The lady, indignant, removed her ear.", "\"I will not stay,\" she said, with a pout,", "\"To hear my character lied about!\""}; String authorEAVESDROP = "Gopete Sherany"; Terms EAVESDROP = new Terms(); EAVESDROP.setTerm("EAVESDROP"); EAVESDROP.setPart(partEAVESDROP); EAVESDROP.setDefinition(definitionEAVESDROP); EAVESDROP.setQuote(quoteEAVESDROP); EAVESDROP.setAuthor(authorEAVESDROP); sampleTerm = EAVESDROP; } public String getTerm() { return term; } public void setTerm(String term) { this.term = term; } public String getSuccess() { return success; } public void setSuccess(String success) { this.success = success; } public String getResultMSG() { return resultMSG; } public void setResultMSG(String resultMSG) { this.resultMSG = resultMSG; } }
このアクションのデータは私自身が直接設定したもので、ここではデモンストレーションとしてのみ使用されています。実際のデータは通常、プロジェクト内のデータベースに保存されます。これは主に jQuery の小さな例なので、あまり詳しく説明しません。
2.Terms.java
package lhb; public class Terms { private String term; private String part; private String definition; private String quote[]; private String author; public String getTerm() { return term; } public void setTerm(String term) { this.term = term; } public String getPart() { return part; } public void setPart(String part) { this.part = part; } public String getDefinition() { return definition; } public void setDefinition(String definition) { this.definition = definition; } public String[] getQuote() { return quote; } public void setQuote(String[] quote) { this.quote = quote; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } }
このクラスは純粋に pojo クラスです。特別な方法はありません。
3.struts.xml
これは、設定を転送するための struts2 の json メソッドです
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <!-- 指定全局国际化资源文件 --> <constant name="struts.custom.i18n.resources" value="i18n"/> <!-- 指定国际化编码所使用的字符集 --> <constant name="struts.i18n.encoding" value="GBK"/> <!-- JSON的action --> <package name="jsonInfo" extends="json-default"> <action name="EGet" class="lhb.EGet"> <result type="json"> <param name="contentType">text/html</param> <param name="includeProperties">success, resultMSG</param> </result> </action> </package> </struts>
ここでは、includeProperties で設定された外側のレイヤーの json、success、および resultMSG を確認できます。これは実際にはうまくいきます。サーバーから必要な値が取得できない場合、ajax アクセスは成功しますが、必要な値が取得できないため、得られた結果は成功とみなされません。フロントエンドの jQuery 操作を容易にするために、成功マークがここに追加されます。
他のメソッドによるサーバーデータの取得も、postメソッドやloadメソッドなどの書き方は基本的にgetと同じです。ここでは詳細には触れません。
3. フォームを動的に送信します
jQuery の AJAX サポートにより、ページを更新せずにフォームを動的に簡単に送信できます。
以下の例:
$('#letter-f form').submit(function(){ //调用preventDefault方法阻止事件冒泡,具体工作就是如果网页有脚本错误,那么则会阻止提交form表单 event.preventDefault(); var formValues = $('input[id="term"]').val(); var requestStr = {'term':formValues.toUpperCase()}; $.get('EGet.action', requestStr, function(data){ var responseObj = $.parseJSON(data); if(responseObj.success == 'true') { var html = ''; var dataObj = $.parseJSON(responseObj.resultMSG); html += "<div class='entry'>"; html += "<h3 class='term'>" + dataObj.term + "</h3>"; html += "<div class='part'>" + dataObj.part + "</div>"; html += "<div class='definition'>"; html += dataObj.definition; if(dataObj.quote){ html += '<div class="quote">'; $.each(dataObj.quote, function(lineIndex, line){ html += '<div class="quote-line">' + line + '</div>'; }); if(dataObj.author){ html += '<div class="quote-author">' + dataObj.author + '</div>'; } } html += "</div>"; html += "</div>"; $('#dictionary').html(html); } else{ var warning = $('Sorry, your term was not found!'); $('#dictionary').html(warning); } }); });
这个例子援引的数据还是上一个EGet.action所用的那个数据。程序的操作过程基本是:
首先调用这个 preventDefault();这个方法在注释里也说明了,用于阻止事件冒泡带来的不便与麻烦。
接下来通过$()获得input的元素,使用val方法获得其值,接下来的使用方法与上例基本相同。
这里也可以使用serialize方法将input元素序列化成如下格式“term=xxx”这样。不过由于服务器端的java程序中的那些数据时硬编码的,所有,不是太方便用,就没用。
4.关于Ajax的观察员函数
jQuery包含了2个全局的ajax观察员函数:ajaxStart和ajaxStop。
分别在执行ajax操作的起始和结束时调用。例如:
//ajax的观察员函数 ajaxStart 和 ajaxStop $('<div id="loading">Loading...</div>').insertBefore('#dictionary') .ajaxStart(function(){ $(this).show(); }).ajaxStop(function(){ $(this).hide(); });
这里无论哪个a标签触发ajax操作,包括静态载入文件和动态服务器访问,都会触发ajaxStart和ajaxStop。
关于错误处理,常用的三个函数:success、complete、error。
下面以error为例:
.error(function(jqXHR){ $('#dictionary').html('An Error occurred:'+ jqXHR.status).append(jqXHR.responseText); });
可以以连缀的写法将error方法放置于get方法之后:“$.get().error()”这样。
刚才看了一下,这个可以将Tomcat的报错,加载到页面之上。这在有的时候还是很有用的。如图:
不过不知道为何这个将我原有样式也覆盖了一些,如果有哪位网友知道,麻烦指正一下问题所在。谢谢了。
5.Ajax和事件
Ajax动态访问服务器以后生成的元素,如果想绑定事件的话,一种方法是每次取到都重新绑定处理程序,这种相对来说比较简单,但是不适合DOM结构经常变化的场景。如果DOM结构经常变化,那么就需要用live方法,实现事件委托。
live用法与bind一样。
关于jquery ajax基础教程今天小编就给大家介绍到这里,后续还会持续给大家介绍,希望大家继续关注脚本之家网站,有你们的关注我们会做的更好,谢谢!