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

Bagaimanakah JSONP Boleh Menyelesaikan Isu Merentas Domain AJAX jQuery?

DDD
DDDasal
2024-12-22 22:15:13348semak imbas

How Can JSONP Solve jQuery AJAX Cross-Domain Issues?

jQuery AJAX Cross-Domain Issue

Dalam senario yang disediakan, di mana dua fail PHP (test.php dan testserver.php) berkomunikasi menggunakan AJAX jQuery, sekatan merentas domain timbul apabila ia berada pada pelayan berasingan. Pelayan A mengehoskan test.php (cth., localhost), manakala pelayan B mengehoskan testserver.php (cth., pelayan web).

Masalah:
Walaupun berjaya melaksanakan permintaan AJAX apabila fail berada pada pelayan yang sama, ia gagal dengan ralat apabila ia berada pada pelayan yang berbeza. Ini disebabkan oleh Dasar Asal Sama (SOP).

Penyelesaian:
Untuk menangani isu merentas domain ini, JSONP (JSON dengan Padding) digunakan. JSONP memanfaatkan panggilan balik untuk memintas sekatan penyemak imbas.

Pelaksanaan:

jQuery (test.php):

$.ajax({
    url: "http://domain.example/path/to/file/testserver.php",
    dataType: 'jsonp', // Notice! JSONP (lowercase 'P')
    success: function(json){
        // Handle JSON response (an array)
        alert("Success");
    },
    error: function(){
        alert("Error");
    }      
});

PHP (testserver.php):

<?php
$arr = array("element1","element2",array("element31","element32"));
$arr['name'] = "response";
$callbackName = $_GET['callback']; // Get the callback name from GET params
echo $callbackName."(".json_encode($arr).");";
?>

Penjelasan:

  1. kaedah $.ajax() jQuery diubah suai untuk menggunakan 'jsonp' sebagai dataType.
  2. Fungsi panggil balik yang dihantar kepada $.ajax() diberikan kepada Pembolehubah PHP $callbackName.
  3. Skrip PHP membenamkan data JSON dalam panggilan fungsi, menggunakan nilai callbackName.
  4. Ini membolehkan penyemak imbas menjana teg dengan data JSON, memintas SOP.

Nota:
Kaedah jQuery alternatif ialah $.getJSON(), yang mengendalikan permintaan JSONP dengan lebih ringkas dengan menambahkan ' panggil balik=?' ke URL. Walau bagaimanapun, URL mesti diubah untuk memasukkan parameter ini agar $.getJSON() berfungsi dengan betul.

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

Kenyataan:
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