如何在不使用json的情况下解决ajax函数中的CORS问题

Posted

技术标签:

【中文标题】如何在不使用json的情况下解决ajax函数中的CORS问题【英文标题】:How to solve the CORS issue in ajax function without use of json 【发布时间】:2021-10-11 14:36:48 【问题描述】:

我有一个 ajax 函数,例如:

function fn_nextitem(sliderNo)
    
  $.get("/index.php?op=ajax", slide_no:sliderNo,function(resp) 
    if (resp) 
     
     
      $('#Div').append(resp);
    
   else 
  
    

我的php代码是这样的:

if(!empty($items ))  
          foreach ($items as $itemid => $info) ;
            $html = include(TEMPLATE_PATH . "/list.php");
          endforeach; 
    
  

此功能在我的本地系统中运行良好。但是在我将此文件移动到测试服务器后,我得到了 CORS 错误。我搜索如何解决这个问题并发现 - 在 ajax 函数中添加 jsonp。但我不能添加这个,因为我想在我的 ajax 函数成功中附加一个模板或页面。是否有任何选项可以在不使用 JSON 的情况下解决此问题?如果我使用 json,那么我没有得到我想要的结果。

【问题讨论】:

所以您的 PHP 代码与客户端代码位于不同的域中?目前尚不清楚相对 url 将如何导致 CORS 问题。 开发还是生产需要解决? 不,我的客户端和服务器端代码在同一个域中 不知道怎么回事?它在我的本地开发中工作。 那么请求重定向了吗?有问题,您在网络请求中看到了什么。 【参考方案1】:

您应该在服务器端处理 CORS。哪个服务器?

nginx

阿帕奇。

或者,您可以使用 PHP 或您正在使用的编程语言来处理它。您的服务器编程语言(例如 php、java 或 nodejs 可以处理标头然后替换。)

如果您使用 PLESK,这里是 Root 解决方案。请写下您用作 Web 服务器的内容。 ?

    警告:只能添加一个标头 Access-Control-Allow-Origin。 如果标头同时在 nginx 和 Apache 中定义,或者分别在 Apache 或 nginx 中定义两次,CORS 将不起作用。 在托管域 example.com 的服务器上登录 Plesk。 转到 -> Apache 和 nginx 设置。

添加 CORS 标头:

for Apache:
  Add the following line to the field Additional directives for 
   HTTP:
   Header set Access-Control-Allow-Origin "http://stack....org"
   Add the following line to the field Additional directives for       
   HTTPS:
   Header set Access-Control-Allow-Origin "https://stack...org"


    for nginx:
    Add one of the following lines to the field Additional nginx 
    directives, depending on whether website works via HTTP or HTTPS:

    add_header 'Access-Control-Allow-Origin' 'http://stack...org';
    add_header 'Access-Control-Allow-Origin' 'https://stack..org';

单击页面底部的确定或应用以应用更改。

例如,对于 PHP,您可以使用这样的脚本。

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

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

【讨论】:

我正在使用 APACHE @Sonia 你可以试试我写的 php 2 行代码。 header(".....") .... 测试一下,如果不行,在 plesk 端为 apache 更改 HEADER。 不确定为什么 OP 在同一个域中需要设置 CORS。 @epascarello 可能是使用不同机器测试和发布或从另一台服务器接收数据的人。这可能发生。我们没有日志文件。 相对 URL 如何访问不同的服务器?【参考方案2】:
header("Access-Control-Allow-Origin: *");

header("Access-Control-Allow-Headers: *");
    
if(!empty($items ))  
  foreach ($items as $itemid => $info) ;
     $html = include(TEMPLATE_PATH . "/list.php");
  endforeach; 
        

【讨论】:

以上是关于如何在不使用json的情况下解决ajax函数中的CORS问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用视图集的情况下序列化 Django 中的注释字段?

gomain函数中如何动态获取数据

如何在不返回 false 的情况下修复 div 中的返回 Ajax

如何在不使用 C++/C 中的阻塞函数的情况下将值从线程返回到主函数

PHP在不使用数组的情况下触发AJAX错误代码

JSON.net:如何在不使用默认构造函数的情况下反序列化?