Rumah > hujung hadapan web > tutorial js > Bagaimanakah JSONP Boleh Menyelesaikan Masalah Komunikasi AJAX Merentas Domain jQuery?

Bagaimanakah JSONP Boleh Menyelesaikan Masalah Komunikasi AJAX Merentas Domain jQuery?

DDD
Lepaskan: 2024-12-22 18:40:10
asal
478 orang telah melayarinya

How Can JSONP Solve jQuery's Cross-Domain AJAX Communication Problems?

jQuery AJAX Cross-Domain Communication Challenge

Apabila menghadapi permintaan AJAX merentas domain, di mana dokumen HTML daripada satu domain cuba membuat meminta ke domain yang berbeza, kesukaran timbul. Mari kita terokai senario dengan dua fail PHP, test.php dan testserver.php:

test.php:

<script src="scripts/jq.js" type="text/javascript"></script>
<script>
  $(function() {
    $.ajax({
      url: "testserver.php",
      success: function() {alert("Success")},
      error: function() {alert("Error")},
      dataType: "json",
      type: "get"
    });
  });
</script>
Salin selepas log masuk

testserver.php:

<?php
$arr = array("element1", "element2", array("element31", "element32"));
$arr['name'] = "response";
echo json_encode($arr);
?>
Salin selepas log masuk

Apabila kedua-dua fail dihoskan pada pelayan yang sama, permintaan AJAX berjaya. Walau bagaimanapun, apabila ia diletakkan pada pelayan yang berbeza, permintaan itu gagal, mencetuskan amaran "Ralat". Ini disebabkan oleh Same Origin Policy (SOP) penyemak imbas, yang mengehadkan perkongsian data merentas domain.

Penyelesaian: Menggunakan JSONP

Untuk mengatasi SOP, kita boleh menggunakan JSONP (JSON dengan Padding). JSONP membenarkan data dihantar sebagai panggilan fungsi, dengan itu memintas sekatan yang dikenakan oleh SOP.

jQuery:

$.ajax({
  url: "testserver.php",
  dataType: 'jsonp', // Notice! JSONP < - P (lowercase)
  success: function(json){
    // do stuff with json (in this case an array)
    alert("Success");
  },
  error: function(){
    alert("Error");
  }
});
Salin selepas log masuk

PHP:

<?php
$arr = array("element1", "element2", array("element31", "element32"));
$arr['name'] = "response";
echo $_GET['callback'] . "(" . json_encode($arr) . ");";
?>
Salin selepas log masuk

Dalam kod yang diubah suai ini, permintaan JavaScript termasuk 'dataType: 'jsonp'' untuk menunjukkan penggunaan JSONP. Skrip PHP mendapatkan semula nama fungsi panggil balik yang dihantar oleh jQuery melalui '$_GET['panggilan balik']' dan menggunakannya untuk membentuk output. Output dalam skrip PHP sepatutnya muncul sebagai fungsi panggil balik diikuti oleh data JSON, memastikan data dipindahkan sebagai panggilan fungsi.

Sebagai alternatif, jQuery menyediakan kaedah $.getJSON() , singkatan untuk pengendalian Permintaan JSONP. Walau bagaimanapun, ia memerlukan URL untuk memasukkan 'panggilan balik=?' sebagai parameter GET, di mana jQuery memasukkan kaedah panggil baliknya sendiri secara dinamik.

Atas ialah kandungan terperinci Bagaimanakah JSONP Boleh Menyelesaikan Masalah Komunikasi AJAX Merentas Domain jQuery?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan