【问题标题】:AJAX cross domain requestAJAX 跨域请求
【发布时间】:2011-06-11 15:52:25
【问题描述】:

我的主域上有我的 JavaScript 文件,我想从子域进行一些调用。

我已添加:

url: "http://domain.com/ajax.php"

所以完整的代码是:

    $.ajax({
        type: "POST",
        url: "http://domain.com/ajax.php",
        data: {
            var1: var1,
            var2: var2
        },
        success: function(data){

        }
    });

但在 Firebug 上,它会将请求显示为 red 并且无法响应。 POST 参数也应有尽有。

我应该在子域上创建一个新的 JS 文件并添加必要的代码并从那里执行 AJAX 调用吗?

编辑:使用 JSONP 代码

我在localhost/ajax.php 上使用它,我从sub.localhost 调用它

    $.ajax({
        dataType: 'jsonp',
        data: 'id=10',
        jsonp: 'jsonp_callback',
        url: 'http://localhost/ajax.php',
        success: function (data) {
            console.log(data);
        },
    });

并且 ajax.php 包含:

<?php
echo $_GET["id"];
?>

【问题讨论】:

  • 这两个域是什么?你的服务器出错了吗?
  • 目前我在 localhost 进行测试,没有错误,只是没有返回任何内容。
  • 尝试在实际域上进行测试。 localhost 到域的问题更多,但请参阅下面的可能解决方案。

标签: javascript jquery ajax cross-domain


【解决方案1】:

您可以使用Access-Control-Allow-Origin 标头来启用跨域请求。

阅读:Cross-Origin Resource Sharing (CORS)

【讨论】:

    【解决方案2】:

    假设你有 jQuery 1.5+ 你可以使用:

    $.ajax({
    
        crossDomain:true,
        type: "POST",
        url: "http://domain.com/ajax.php",
        data: {
            var1: var1,
            var2: var2
        },
        success: function(data){
    
        }
    
    });
    

    来自文档:

    跨域(添加 1.5)

    Default: false for same-domain requests, true for cross-domain requests

    如果您希望在同一域上强制执行跨域请求(例如 JSONP),请将 crossDomain 的值设置为 true。例如,这允许服务器端重定向到另一个域

    【讨论】:

      【解决方案3】:

      对于子域调用,您有两种选择:

      1. 两边都使用document.domain

      2. 通过 jQuery 1.5 的 crossDomain ajax 规范或 directly 使用 jsonP。

      【讨论】:

      • 使用 jsonp 它甚至不会在子域上执行 ajax 请求
      • 发布你的 jsonp 代码(在调用方和被调用方),我会看看。
      • 啊,你的回复需要json格式:例如{id: 5}
      • 将 votes.php 更新为 $array = array( 'id' => $_GET["id"] );回声 json_encode($array); ,给出了格式化的json ..但是在子域上,当我单击按钮时,它似乎甚至没有看到有一个ajax请求,因为firebug上没有任何反应......它甚至没有显示请求
      • 我看到你指定了一个 jsonp 回调。现在为了简单起见这样做:$.getJSON('http://localhost/ajax.php?id=10&amp;callback=?', function(data) { console.log(data)});
      猜你喜欢
      • 2013-03-06
      • 1970-01-01
      • 2012-04-15
      • 2011-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-04
      相关资源
      最近更新 更多