这里有两个页面,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);
?>

现在我的问题是:当这两个文件都在同一服务器(本地主机或web服务器),它的工作和警报(“成功”)被调用;如果它在不同的服务器上,即web服务器上的testserver.php和localhost上的test.php,则它不工作,并且alert(“错误”)正在执行。即使AJAX内部的URL更改为http://domain.example/path/to/file/testserver.php


当前回答

我知道3个方法来解决你的问题:

First if you have access to both domains you can allow access for all other domain using : header("Access-Control-Allow-Origin: *"); or just a domain by adding code bellow to .htaccess file: <FilesMatch "\.(ttf|otf|eot|woff)$"> <IfModule mod_headers.c> SetEnvIf Origin "http(s)?://(www\.)?(google.com|staging.google.com|development.google.com|otherdomain.net|dev02.otherdomain.net)$" AccessControlAllowOrigin=$0 Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin </IfModule> </FilesMatch> you can have ajax request to a php file in your server and handle request to another domain using this php file. you can use jsonp , because it doesn't need permission. for this you can read our friend @BGerrissen answer.

其他回答

你可以通过添加Access-Control-Allow-Origin来控制HTTP头。将其设置为*将接受来自任何域的跨域AJAX请求。

使用PHP真的很简单,只需在脚本中添加以下一行,你想要从你的域访问外部:

header("Access-Control-Allow-Origin: *");

不要忘记在httpd.conf中启用mod_headers模块。

我知道3个方法来解决你的问题:

First if you have access to both domains you can allow access for all other domain using : header("Access-Control-Allow-Origin: *"); or just a domain by adding code bellow to .htaccess file: <FilesMatch "\.(ttf|otf|eot|woff)$"> <IfModule mod_headers.c> SetEnvIf Origin "http(s)?://(www\.)?(google.com|staging.google.com|development.google.com|otherdomain.net|dev02.otherdomain.net)$" AccessControlAllowOrigin=$0 Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin </IfModule> </FilesMatch> you can have ajax request to a php file in your server and handle request to another domain using this php file. you can use jsonp , because it doesn't need permission. for this you can read our friend @BGerrissen answer.

Jquery文档(链接):

由于浏览器的安全限制,大多数“Ajax”请求都遵循同源策略;请求无法成功地从不同的域、子域或协议检索数据。 脚本和JSONP请求不受同源策略限制。

因此,我认为您需要使用jsonp来处理请求。但我自己还没试过。

使用JSONP。

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");
     }      
});

PHP:

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

echo可能是错误的,我已经有一段时间没用php了。在任何情况下,你都需要输出callbackName('jsonString'),注意引号。jQuery会传递自己的回调名称,所以你需要从get参数中获取。

正如Stefan Kendall所发布的,$.getJSON()是一个简便方法,但随后你需要附加'callback=?'到url作为GET参数(是的,值是?,jQuery用自己生成的回调方法替换它)。

这是可能的,但您需要使用JSONP,而不是JSON。斯特凡的线索给你指明了方向。jQuery AJAX页面有更多关于JSONP的信息。

Remy Sharp有一个使用PHP的详细示例。