【问题标题】:Ajax request works in remote server but not in local server (with Codeigniter)Ajax 请求在远程服务器中有效,但在本地服务器中无效(使用 Codeigniter)
【发布时间】:2013-01-06 23:33:18
【问题描述】:

我有一个 Web 应用程序,它使用 Codeigniter-php 代码向服务器发出 Ajax 请求。 Ajax 请求在本地服务器中正常工作,但在应用程序托管在远程服务器中时无法正常工作。 控制台错误是:

XMLHttpRequest cannot load http://localhost/CI-example/index.php/control/controlHome. Origin http://www.page.com is not allowed by Access-Control-Allow-Origin.

令人惊讶的是,请求是在服务器中发出的,而不是响应中的。

我用于 Ajax 请求的 URL 是:

AJAX_URL = "http://localhost/CI-example/site/index.php/control/controlHome"; 

但是,我也尝试过:

AJAX_URL = "http://www.page.com/CI-example/site/index.php/control/controlHome";

并捕获下一个错误:

POST http://www.page.com/webdom/site/index.php/control/controlHome 500 (Internal Server Error) 

我该怎么办?

编辑: www.page.com 是一个子域。子域用于ajax请求时需要做一些配置吗?

文件夹组织是:

/CI-example
---/application/controllers/control.php
---/system
---/site/js/ajaxRequest.js

【问题讨论】:

  • 你试过AJAX_URL = "/CI-example/site/index.php/control/controlHome"吗?您不需要包含主机名,因为 AJAX 仅对内部请求有效。
  • 您是否有可能获得重定向?尝试在单独的选项卡中调用 URL,并查看开发人员工具的网络选项卡。
  • @AustinMullins,我试过了,错误是最后一个问题
  • @Thomas。我认为没有重定向
  • @vicenrele,查看大图的回答:stackoverflow.com/questions/2558977/ajax-cross-domain-call

标签: javascript php jquery ajax codeigniter


【解决方案1】:

当我到达这里时,当您向服务器发送 ajax 请求而不是返回 500 (Internal Server Error) 时。我确定错误来自服务器端,可能有以下原因-

  1. 如果代码中的一切正常,那么您的base_url 可能与您请求的不同。是的,这可能会导致问题,例如,如果您托管了 Web 应用程序并且您的 base_urlwww.mysite.com 并且您正在请求 mysite.com
  2. 下一个原因可能是,您在 Windows 或任何区分大小写的系统中开发了项目,但是当您上传到任何类似 linux 的服务器时,每个文件名都将区分大小写。例如,假设您提供的模型文件名是 MyModel.php,但是当您加载模型时,它会生成类似 Unable to find the specific class 之类的错误。

【讨论】:

    【解决方案2】:

    您不能使用 AJAX 向其他域发出 HTTP POST 请求,除非该页面允许您使用名为“Access-Control-Allow-Origin”的特殊标头来这样做。

    localhost 与 page.com 不同,这就是它不起作用的原因。

    【讨论】:

    • 如果源请求来自与目标请求域相同的域,则不会出现该错误。
    • 你知道如果是子域而不是域有什么问题吗?
    【解决方案3】:

    http://www.page.com 的 url 上的响应说页面执行期间出现了问题。你的 PHP 错误日志应该可以帮助你找到什么。

    添加ini_set('display_errors', 1) 行可能会将错误返回到错误处理程序中的ajax 请求。使用后不要忘记删除该行,您不希望它出现在生产代码中。

    【讨论】:

      【解决方案4】:

      第二个错误是:500 (Internal Server Error)

      这意味着服务器端出现错误 - 不是跨域策略问题。
      这可能是您的 PHP 脚本执行过程中的错误。

      检查您的错误日志(例如:如果您使用标准 LAMP 堆栈,则错误日志应位于 /var/log/apache2/ 中的某处)

      【讨论】:

        【解决方案5】:

        试试这个,

        http://localhost/CI-example/index.php/control/controlHome
        

        而不是

        http://localhost/CI-example/site/index.php/control/controlHome
        

        在您的 ajax 网址中。 从您的文件夹结构来看,您的 URL 中无需包含“站点”

        【讨论】:

          猜你喜欢
          • 2015-07-03
          • 2023-02-24
          • 2017-08-16
          • 2013-01-25
          • 2017-03-26
          • 1970-01-01
          • 1970-01-01
          • 2023-03-04
          • 1970-01-01
          相关资源
          最近更新 更多