jQuery AJAX cross domain

Εδώ είναι δύο σελίδες, η test.php και η 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>

testserver.php

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

Τώρα το πρόβλημά μου: όταν και τα δύο αυτά αρχεία βρίσκονται στον ίδιο διακομιστή (είτε localhost είτε web server), λειτουργεί και καλείται το alert("Success") Αν είναι σε διαφορετικούς διακομιστές, δηλαδή testserver.php στον web server και test.php στον localhost, δεν λειτουργεί και εκτελείται το alert("Error"). Ακόμη και αν η διεύθυνση URL μέσα στο ajax αλλάξει σε http://domain.com/path/to/file/testserver.php.

Λύση

Χρησιμοποιήστε [JSONP][1].

jQuery:


$.ajax({
     url:"testserver.php",
     dataType: 'jsonp', // Notice! JSONP 
Σχόλια (11)

Πρέπει να ρίξετε μια ματιά στην Πολιτική ίδιας προέλευσης:

Στην πληροφορική, η πολιτική ίδιας προέλευσης είναι μια σημαντική έννοια ασφάλειας για ένα αριθμό προγραμμάτων προγραμματισμού από την πλευρά του προγράμματος περιήγησης γλώσσες, όπως η JavaScript. Το πολιτική επιτρέπει σενάρια που εκτελούνται σε σελίδες που προέρχονται από τον ίδιο ιστότοπο να έχουν πρόσβαση η μία στις μεθόδους της άλλης και ιδιότητες χωρίς συγκεκριμένες περιορισμούς, αλλά εμποδίζει την πρόσβαση σε στις περισσότερες μεθόδους και ιδιότητες μεταξύ σελίδες σε διαφορετικές τοποθεσίες.

Για να είστε σε θέση να λάβετε δεδομένα, πρέπει να είναι:

Το ίδιο πρωτόκολλο και ο ίδιος κεντρικός υπολογιστής

Πρέπει να υλοποιήσετε το JSONP για να το παρακάμψετε.

Σχόλια (1)

Η ασφάλεια του προγράμματος περιήγησης αποτρέπει την πραγματοποίηση κλήσης ajax από μια σελίδα που φιλοξενείται σε έναν τομέα σε μια σελίδα που φιλοξενείται σε διαφορετικό τομέα- αυτό ονομάζεται "πολιτική ίδιας προέλευσης".

Σχόλια (1)