Saya banyak membaca untuk kesalahan 'Access-Control-Allow-Origin', tapi saya tidak mengerti apa yang harus saya perbaiki :(
Saya bermain dengan Google Moderator API, tetapi ketika saya mencoba untuk menambahkan seri baru saya menerima:
XMLHttpRequest cannot load
https://www.googleapis.com/moderator/v1/series?key=[key]
&data%5Bdescription%5D=Share+and+rank+tips+for+eating+healthily+on+the+cheaps!
&data%5Bname%5D=Eating+Healthy+%26+Cheap
&data%5BvideoSubmissionAllowed%5D=false.
Origin [my_domain] is not allowed by Access-Control-Allow-Origin.
Saya mencoba dengan dan tanpa parameter panggilan balik, saya mencoba menambahkan 'Access-Control-Allow-Origin *' ke header. Dan saya tidak tahu cara menggunakan $. GetJSON di sini, jika berlaku, karena saya harus menambahkan header Otorisasi dan saya tidak tahu bagaimana melakukannya tanpa sebelumnya. Panggil dari $ .ajax: /
Adakah terang untuk kegelapan ini uu?
Itulah kodenya:
<script src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
var scope = "https://www.googleapis.com/auth/moderator";
var token = '';
function create(){
if (token == '')
token = doCheck();
var myData = {
"data": {
"description": "Share and rank tips for eating healthily on the cheaps!",
"name": "Eating Healthy & Cheap",
"videoSubmissionAllowed": false
}
};
$.ajax({
url: 'https://www.googleapis.com/moderator/v1/series?key='+key,
type: 'POST',
callback: '?',
data: myData,
datatype: 'application/json',
success: function() { alert("Success"); },
error: function() { alert('Failed!'); },
beforeSend: setHeader
});
}
function setHeader(xhr) {
xhr.setRequestHeader('Authorization', token);
}
function doLogin(){
if (token == ''){
token = google.accounts.user.login(scope);
}else{
alert('already logged');
}
}
function doCheck(){
token = google.accounts.user.checkLogin(scope);
return token;
}
</script>
...
...
<div data-role="content">
<input type="button" value="Login" onclick="doLogin();">
<input type="button" value="Get data" onclick="getModerator();">
<input type="button" value="Create" onclick="create();">
</div><!-- /content -->
Jawaban:
Saya memecahkan kesalahan Access-Control-Allow-Origin memodifikasi parameter dataType ke dataType: 'jsonp' dan menambahkan crossDomain: true
sumber
crossDomain:true
tidak diperlukan. Pemahaman saya adalah bahwa itu hanya diperlukan jika Anda membuat permintaan di domain Anda sendiri tetapi ingin jQuery memperlakukannya seperti permintaan lintas-domain.crossDomain
tidak dibutuhkan. ini adalahjsonp
permintaan reguler yang dimaksudkan untuk komunikasi lintas domain.Saya memiliki masalah yang sama persis dan itu bukan domain silang tetapi domain yang sama. Saya baru saja menambahkan baris ini ke file php yang menangani permintaan ajax.
Itu bekerja seperti pesona. Terima kasih untuk posternya
sumber
Jika Anda memiliki kesalahan ini mencoba untuk menggunakan layanan yang Anda tidak dapat menambahkan header
Access-Control-Allow-Origin *
di aplikasi itu, tetapi Anda dapat menempatkan di depan server proxy terbalik, kesalahan dapat dihindari dengan penulisan ulang header.Dengan asumsi aplikasi berjalan pada port 8080 (domain publik di www.mydomain.com ), dan Anda meletakkan proxy terbalik di host yang sama di port 80, ini adalah konfigurasi untuk proxy reverse Nginx :
sumber
Access-Control-Allow-Origin: http://example.com
.Ya, saat jQuery melihat URL milik domain yang berbeda, ia menganggap panggilan itu sebagai panggilan lintas domain, sehingga
crossdomain:true
tidak diperlukan di sini.Juga, penting untuk dicatat bahwa Anda tidak dapat membuat panggilan sinkron dengan
$.ajax
jika URL Anda milik domain lain (lintas domain) atau Anda menggunakan JSONP. Hanya panggilan async yang diizinkan.Catatan: Anda dapat memanggil layanan secara sinkron jika Anda menentukan
async:false
dengan permintaan Anda.sumber
Dalam kasus saya, nama sub domain menyebabkan masalah. Berikut detailnya
Saya menggunakan
app_development.something.com
, di sini menggarisbawahi (_
) sub domain membuat kesalahan CORS. Setelah mengubahapp_development
keapp-development
hasil yang baik.sumber
Ada sedikit hack dengan php. Dan itu bekerja tidak hanya dengan Google, tetapi dengan situs web apa pun yang tidak Anda kontrol dan tidak dapat menambahkan Access-Control-Allow-Origin *
Kita perlu membuat file-PHP (mis. GetContentFromUrl.php ) di server web kami dan membuat sedikit trik.
PHP
JS
Bagaimana itu bekerja:
Dan kita dapat membuat acara diKlik, letakkan acara ini di beberapa tombol. Semoga ini bisa membantu!
sumber