Rumah hujung hadapan web tutorial js Kemahiran pelaksanaan kod_javascript panggilan merentas domain panggilan web Ajax

Kemahiran pelaksanaan kod_javascript panggilan merentas domain panggilan web Ajax

May 16, 2016 am 09:00 AM
ajax webservice

Baru-baru ini, ajax menghadapi masalah merentas domain semasa mengakses perkhidmatan web saya mencari maklumat dalam talian dan meringkaskannya seperti berikut (banyak daripadanya disalin daripada ringkasan orang lain yang mereka fikir bagus)

 <>

Mari mulakan dengan kod yang saya laksanakan:

Kod bahagian hadapan:

$.ajax({
 type: "get",
 url: "http://localhost/Service1.asmx/getElevatorStatusJsonData&#63;jsoncallback=&#63;",
 dataType: "jsonp",
 jsonp: "json",
 data: "",
 success: function (result) {
 var data = eval(result);
 for (var i = 0; i < data.length; i++) {
 alert(data[i].ID + "--" + data[i].Name);
 }
 },
 error: function (a, b, c) {
 alert(c);
 }
 }); 
Salin selepas log masuk

Kod pelayan:

 /// <summary>
 /// 获取状态数据信息
 /// </summary>
 /// <returns></returns>
 [WebMethod]
 public void getElevatorStatusJsonData()
 {
 List<List<DeviceInfo>> elevatordatas = new List<List<DeviceInfo>>();
 List<SendDicdate> searchList = XmlSerializeHelper.XmlDeserializeFromFile<List<SendDicdate>>(@ConfigUtil.servicePath + ConfigUtil.getConfigByKey("xmlPath") + "查询指令信息.xml", Encoding.UTF8);
 foreach (SendDicdate item in searchList)
 {
 string key = item.portno + "-" + item.bordrate + "-" + item.sendtype;
 List<DeviceInfo> deviceInfoList = (List<DeviceInfo>)Context.Cache.Get(key);
 elevatordatas.Add(deviceInfoList);
 }

 String result = "";
 DataContractJsonSerializer json = new DataContractJsonSerializer(elevatordatas.GetType());
 using (MemoryStream stream = new MemoryStream())
 {
 json.WriteObject(stream, elevatordatas);
 result = Encoding.UTF8.GetString(stream.ToArray());
 }
 String jsoncallback = HttpContext.Current.Request["jsoncallback"];
 result = jsoncallback + '(' + result + ')';
 HttpContext.Current.Response.Write(result);
 HttpContext.Current.Response.End();

 }
Salin selepas log masuk

 c#

Di atas ialah kod pelaksanaan untuk memanggil pelayan c# Berikut adalah bahagian java Parameter mungkin berbeza, tetapi prinsipnya adalah sama

java:

 

String callbackFunName = context.Request["callbackparam"];
  context.Response.Write(callbackFunName + "([ { \"name\":\"John\"}])");
Salin selepas log masuk

  PS: Parameter jsonp klien digunakan untuk menghantar parameter melalui url, dan nama parameter parameter jsonpCallback dilalui Agak sukar untuk menyebutnya dalam istilah awam:

jsonp: ""

jsonpCallback:""

Dengan cara ini: Dalam penyemak imbas Chrome, anda juga boleh menetapkan konteks maklumat pengepala.Response.AddHeader("Access-Control-Allow-Origin", "*"); -permintaan domain Dan tidak perlu menetapkan parameter ajax berikut

 

dataType : "jsonp",
  jsonp: "callbackparam",
  jsonpCallback:"jsonpCallback1"
Salin selepas log masuk

Data boleh diperolehi melalui permintaan ajax biasa.

Berikut adalah prinsip selepas membaca apa yang orang lain jelaskan, nampaknya masuk akal:

1. Masalah yang terkenal, permintaan langsung Ajax untuk fail biasa mempunyai masalah akses tanpa kebenaran merentas domain Tidak kira sama ada anda adalah halaman statik, halaman web dinamik, perkhidmatan web atau WCF, asalkan ia ialah permintaan merentas domain, ia tidak dibenarkan;

 2. Walau bagaimanapun, kami juga mendapati bahawa apabila memanggil fail js pada halaman Web, ia tidak dipengaruhi oleh sama ada ia merentas domain (bukan itu sahaja, kami juga mendapati bahawa semua teg dengan atribut "src" mempunyai silang -keupayaan domain, seperti

3. Ia boleh dinilai bahawa pada peringkat semasa, jika anda ingin mengakses data merentas domain melalui web tulen (kawalan ActiveX, proksi sisi pelayan, Soket Web HTML5 masa hadapan, dll. tidak disertakan), hanya ada satu kemungkinan, dan itu adalah untuk mengakses data dari jauh Pelayan cuba memuatkan data ke dalam fail format js untuk panggilan pelanggan dan pemprosesan selanjutnya;

4. Kami kebetulan sudah mengetahui bahawa terdapat format data aksara tulen yang dipanggil JSON yang boleh menerangkan data kompleks dengan ringkas Apa yang lebih baik ialah JSON juga disokong secara asli oleh js, jadi pelanggan boleh memproses data dalam format ini hampir. seperti yang dikehendaki ;

5. Dengan cara ini, penyelesaiannya sudah sedia Pelanggan web memanggil fail format js yang dijana secara dinamik pada pelayan merentas domain (biasanya dengan JSON sebagai akhiran) dengan cara yang sama seperti skrip panggilan jelas bahawa sebab mengapa pelayan memerlukan Tujuan menjana fail JSON secara dinamik adalah untuk memuatkan data yang diperlukan oleh klien ke dalamnya.

6. Selepas pelanggan berjaya memanggil fail JSON, ia akan memperoleh data yang diperlukannya adalah untuk memproses dan memaparkannya mengikut keperluannya sendiri Kaedah mendapatkan data jauh ini kelihatan seperti AJAX , tetapi ia sebenarnya tidak sama.

7. Untuk memudahkan pelanggan menggunakan data, protokol penghantaran tidak formal telah dibentuk secara beransur-ansur kemudian pelayan mengembalikan data Parameter panggil balik ini akan digunakan sebagai nama fungsi untuk membungkus data JSON, supaya pelanggan boleh menyesuaikan fungsinya sendiri untuk memproses data yang dikembalikan secara automatik.

Pembangun pintar boleh dengan mudah berfikir bahawa selagi skrip js yang disediakan oleh pelayan dijana secara dinamik, pemanggil boleh lulus parameter untuk memberitahu pelayan "Saya mahu js yang memanggil kod fungsi XXX, sila kembalikan kepada saya", jadi pelayan boleh menjana skrip js dan bertindak balas mengikut keperluan pelanggan.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><title></title><script type="text/javascript">// 得到航班信息查询结果后的回调函数var flightHandler =function(data){
 alert('你查询的航班结果是:piao价 '+ data.price +' 元,'+'余piao '+ data.tickets +' 张。');
 }; // 提供jsonp服务的url地址(不管是什么类型的地址,最终生成的返回值都是一段javascript代码)var url ="http://flightQuery.com/jsonp/flightResult.aspx&#63;code=CA1998&callback=flightHandler"; // 创建script标签,设置其属性var script = document.createElement('script');
 script.setAttribute('src', url); 
 // 把script标签加入head,此时调用开始 
//document.getElementsByTagName('head')[0].appendChild(script); 
</script></head><body></body></html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><title>Untitled Page</title><script type="text/javascript" src=jquery.min.js"></script><script type="text/javascript">
 jQuery(document).ready(function(){
 $.ajax({
 type: "get",
 async: false,
 url: "http://flightQuery.com/jsonp/flightResult.aspx&#63;code=CA1998",
 dataType: "jsonp",
 jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback) jsonpCallback:"flightHandler",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,也可以写"&#63;",jQuery会自动为你处理数据 success: function(json){
 alert('您查询到航班信息:piao价: '+ json.price +' 元,余piao: '+ json.tickets +' 张。');
 },
 error: function(){
 alert('fail');
 }
 });
 }); </script></head><body></body></html>
Salin selepas log masuk

Bukankah ia sedikit pelik? Mengapa saya tidak menulis fungsi flightHandler kali ini? Dan ia sebenarnya berjaya! Haha, ini adalah kredit jQuery Apabila jquery mengendalikan ajax jenis jsonp (saya masih tidak boleh mengeluh, walaupun jquery juga mengklasifikasikan jsonp ke dalam ajax, mereka benar-benar bukan perkara yang sama), ia secara automatik menghasilkannya untuk anda Adakah bagus untuk memanggil semula fungsi dan mengeluarkan data untuk kaedah atribut kejayaan untuk dipanggil?

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menyelesaikan ralat 403 yang dihadapi oleh permintaan jQuery AJAX Bagaimana untuk menyelesaikan ralat 403 yang dihadapi oleh permintaan jQuery AJAX Feb 20, 2024 am 10:07 AM

Tajuk: Kaedah dan contoh kod untuk menyelesaikan ralat 403 dalam permintaan AJAX jQuery Ralat 403 merujuk kepada permintaan bahawa pelayan melarang akses kepada sumber Ralat ini biasanya berlaku kerana permintaan itu tidak mempunyai kebenaran atau ditolak oleh pelayan. Apabila membuat permintaan jQueryAJAX, anda kadangkala menghadapi situasi ini Artikel ini akan memperkenalkan cara menyelesaikan masalah ini dan memberikan contoh kod. Penyelesaian: Semak kebenaran: Mula-mula pastikan alamat URL yang diminta adalah betul dan sahkan bahawa anda mempunyai kebenaran yang mencukupi untuk mengakses sumber tersebut.

Bagaimana untuk menyelesaikan ralat permintaan jQuery AJAX 403 Bagaimana untuk menyelesaikan ralat permintaan jQuery AJAX 403 Feb 19, 2024 pm 05:55 PM

jQuery ialah perpustakaan JavaScript popular yang digunakan untuk memudahkan pembangunan sisi klien. AJAX ialah teknologi yang menghantar permintaan tak segerak dan berinteraksi dengan pelayan tanpa memuatkan semula keseluruhan halaman web. Walau bagaimanapun, apabila menggunakan jQuery untuk membuat permintaan AJAX, anda kadangkala menghadapi 403 ralat. Ralat 403 biasanya ralat akses yang dinafikan pelayan, mungkin disebabkan oleh dasar keselamatan atau isu kebenaran. Dalam artikel ini, kami akan membincangkan cara menyelesaikan permintaan jQueryAJAX yang menghadapi ralat 403

Bagaimana untuk mendapatkan pembolehubah daripada kaedah PHP menggunakan Ajax? Bagaimana untuk mendapatkan pembolehubah daripada kaedah PHP menggunakan Ajax? Mar 09, 2024 pm 05:36 PM

Menggunakan Ajax untuk mendapatkan pembolehubah daripada kaedah PHP adalah senario biasa dalam pembangunan web Melalui Ajax, halaman boleh diperoleh secara dinamik tanpa menyegarkan data. Dalam artikel ini, kami akan memperkenalkan cara menggunakan Ajax untuk mendapatkan pembolehubah daripada kaedah PHP, dan memberikan contoh kod khusus. Pertama, kita perlu menulis fail PHP untuk mengendalikan permintaan Ajax dan mengembalikan pembolehubah yang diperlukan. Berikut ialah kod contoh untuk fail PHP mudah getData.php:

Bagaimana untuk menyelesaikan masalah jQuery AJAX ralat 403? Bagaimana untuk menyelesaikan masalah jQuery AJAX ralat 403? Feb 23, 2024 pm 04:27 PM

Bagaimana untuk menyelesaikan masalah jQueryAJAX ralat 403? Apabila membangunkan aplikasi web, jQuery sering digunakan untuk menghantar permintaan tak segerak. Walau bagaimanapun, kadangkala anda mungkin menghadapi kod ralat 403 apabila menggunakan jQueryAJAX, menunjukkan bahawa akses dilarang oleh pelayan. Ini biasanya disebabkan oleh tetapan keselamatan bahagian pelayan, tetapi terdapat cara untuk mengatasinya. Artikel ini akan memperkenalkan cara menyelesaikan masalah ralat jQueryAJAX 403 dan memberikan contoh kod khusus. 1. membuat

PHP lwn. Ajax: Penyelesaian untuk mencipta kandungan yang dimuatkan secara dinamik PHP lwn. Ajax: Penyelesaian untuk mencipta kandungan yang dimuatkan secara dinamik Jun 06, 2024 pm 01:12 PM

Ajax (JavaScript Asynchronous dan XML) membenarkan menambah kandungan dinamik tanpa memuatkan semula halaman. Menggunakan PHP dan Ajax, anda boleh memuatkan senarai produk secara dinamik: HTML mencipta halaman dengan elemen kontena dan permintaan Ajax menambah data pada elemen selepas memuatkannya. JavaScript menggunakan Ajax untuk menghantar permintaan kepada pelayan melalui XMLHttpRequest untuk mendapatkan data produk dalam format JSON daripada pelayan. PHP menggunakan MySQL untuk menanyakan data produk daripada pangkalan data dan mengekodnya ke dalam format JSON. JavaScript menghuraikan data JSON dan memaparkannya dalam bekas halaman. Mengklik butang mencetuskan permintaan Ajax untuk memuatkan senarai produk.

Bagaimana untuk memanggil WebService menggunakan Java Bagaimana untuk memanggil WebService menggunakan Java Dec 29, 2023 pm 02:32 PM

Langkah kaedah menggunakan Java untuk memanggil WebService memerlukan contoh kod khusus Perkhidmatan Web ialah antara muka program aplikasi berasaskan Web yang menyediakan pelbagai fungsi melalui rangkaian. Dalam pembangunan Java, kita sering perlu menggunakan perkhidmatan Web untuk berinteraksi dengan sistem lain. Artikel ini akan memperkenalkan cara menggunakan Java untuk memanggil WebService dan memberikan contoh kod khusus. 1. Fahami WebService WebService ialah protokol komunikasi piawai menggunakan format XML

Pertukaran data tak segerak menggunakan fungsi Ajax Pertukaran data tak segerak menggunakan fungsi Ajax Jan 26, 2024 am 09:41 AM

Cara menggunakan fungsi Ajax untuk mencapai interaksi data tak segerak Dengan perkembangan teknologi Internet dan Web, interaksi data antara bahagian hadapan dan bahagian belakang telah menjadi sangat penting. Kaedah interaksi data tradisional, seperti penyegaran halaman dan penyerahan borang, tidak lagi dapat memenuhi keperluan pengguna. Ajax (JavaScript Asynchronous dan XML) telah menjadi alat penting untuk interaksi data tak segerak. Ajax membolehkan web menggunakan JavaScript dan objek XMLHttpRequest

Memahami Rangka Kerja Ajax: Terokai Lima Rangka Kerja Biasa Memahami Rangka Kerja Ajax: Terokai Lima Rangka Kerja Biasa Jan 26, 2024 am 09:28 AM

Memahami Rangka Kerja Ajax: Terokai lima rangka kerja biasa, memerlukan contoh kod khusus Pengenalan: Ajax ialah salah satu teknologi penting dalam pembangunan aplikasi Web moden. Ia telah menjadi bahagian penting dalam pembangunan bahagian hadapan kerana ciri-cirinya seperti menyokong interaksi data tak segerak dan menambah baik pengalaman pengguna. Untuk lebih memahami dan menguasai rangka kerja Ajax, artikel ini akan memperkenalkan lima rangka kerja Ajax biasa dan menyediakan contoh kod khusus untuk membantu pembaca memperoleh pemahaman yang mendalam tentang penggunaan dan kelebihan rangka kerja ini. 1. jQueryjQuery adalah yang paling banyak pada masa ini

See all articles