1

ブックマークレットを設定しました。コードをチェックするためのアラートがページ全体にありますが、何らかの理由でajaxが機能していません。ローカルホストではうまく機能しますが、外部サイトでテストしていると失敗します

$.ajax({
    url: "http://127.0.0.1/sites.php",
    type:"POST",
    data: "site_url="+urlValue  
}).error(function(){
    alert("error");
}).done(function(data){
   alert("inside ajax");
   //some coding

});

このスクリプトはローカルホストでは機能しますが、外部サイトでは機能しません。何故ですか?URLがローカルホストだからですか?しかし、私は外部サイトで他のいくつかのローカルホストスクリプトをテストしましたが、それは機能します。たとえば、ローカルホストURLhttp://127.0.0.1/css/sample.cssを使用してCSSスクリプトを挿入し、それを外部サイトに配置すると、CSSスタイルが機能します。

4

2 に答える 2

2

これは同一オリジンポリシーに違反しています

CORS を読むhttp://www.w3.org/TR/cors/http://en.wikipedia.org/wiki/Cross-origin_resource_sharing

出力が送信される前に、sites.php の先頭にこれを追加します。

<?php
header('Access-Control-Allow-Origin: *');
?>

*bookmarlet であるため、任意のサイトを指定するために使用します。

于 2012-07-15T05:17:34.327 に答える
1

「外部」URL と言うとき、このページが実行されている Web サイト以外の Web サイトを指していますか? もしそうなら、私の最初の考えは、あなたが ajax 呼び出しでセキュリティ制限に遭遇していることです。

参照: http://en.wikipedia.org/wiki/Same_origin_policy

リモート サーバーに対して ajax 呼び出しを実行しようとすると、エラーなしで実行されますが、応答は完全に空白になります。ブラウザーは、応答を使用して何かを行うことを許可しません。jQueryが決定を下すものがないため、成功イベントもエラーイベントもトリガーされないため、イライラしたことを思い出したようです。

同じサイトに sites.php を配置するか、リモート ファイルを取得するローカルの php ページを作成する必要があります。これを行うと、ajax 呼び出しでリモート ファイルを php スクリプトからローカルに取得できます。

以下は、UltraCart で ajax 呼び出しをプロキシするために使用するコードの一部です: (私たちは PHP ショップではないので、それを改善する方法についていくつか提案したいと思います。) ローカル マシンにインストールし、それを使用して ajax をプロキシします。呼び出します。

<?php

$server_get_url = "https://www.myremoteserver.com/somepage.php"; 
$post_data = file_get_contents('php://input');

foreach($_SERVER as $i=>$val) {  
    if (strpos($i, 'HTTP_') === 0) {  
        $name = str_replace(array('HTTP_', '_'), array('', '-'), $i);  
        $header[$name] = $val;  
    }  
}

$header[] = "Content-Length: ". strlen($post_data);

$ch = curl_init( $server_get_url ); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 100);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

if ( strlen($post_data)>0 ){
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
}

$response = curl_exec($ch);     

if (curl_errno($ch)) {
    print curl_error($ch);
} else {
    curl_close($ch);
// our page returns back json ... you may need to adjust this.
    header('Content-type: application/json');
    print $response;
}
?>
于 2012-07-15T04:59:22.597 に答える