猿问

jQuery AJAX跨域

jQuery AJAX跨域

这是两个页面,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服务器)上时,它可以工作并被alert("Success")调用; 如果它位于不同的服务器上,意味着Web服务器上的testserver.php和localhost上的test.php,它就无法工作,并且alert("Error")正在执行。即使ajax中的URL更改为http://domain.com/path/to/file/testserver.php


回首忆惘然
浏览 2947回答 4
4回答

慕标5832272

您可以通过添加Access-Control-Allow-Origin来通过HTTP标头控制此操作。将其设置为*将接受来自任何域的跨域AJAX请求。使用PHP非常简单,只需将以下行添加到您希望从域外访问的脚本中:header("Access-Control-Allow-Origin:&nbsp;*");不要忘记在httpd.conf中启用mod_headers模块。

犯罪嫌疑人X

您需要查看同源策略:在计算中,相同的源策略是许多浏览器端编程语言(如JavaScript)的重要安全概念。该策略允许在源自同一站点的页面上运行的脚本在没有特定限制的情况下访问彼此的方法和属性,但阻止访问不同站点上的页面上的大多数方法和属性。为了能够获取数据,它必须是:相同的协议和主机您需要实现JSONP来解决它。
随时随地看视频慕课网APP
我要回答