我正在将 ajax 请求传递给另一个远程服务器以获取访问记录

Posted

技术标签:

【中文标题】我正在将 ajax 请求传递给另一个远程服务器以获取访问记录【英文标题】:I am passing ajax request to other remoter server for access record 【发布时间】:2019-11-28 01:43:00 【问题描述】:

我正在尝试通过从我当前的远程页面向其他远程服务器控制器传递 ajax 请求来获取数据

这是我的第一个远程查看页面代码:

<?php include 'header.php'; ?>

<script src="/assets/js/plugins/jquery.min.js"></script>
<script src="/assets/js/jquery.validate.min.js"></script>
<script>
  $.noConflict();
</script>
     <div class="breadcrumb-row">
            <div class="container">
                <div class="row">
                   <div class="col-md-12 col-sm-12 m-b30">
                     <div class="section-head">
                        <div class="newsLetter-bx">

                      <form role="form" id="status_form" name="status_form" method="post" autocomplete="off" >

                                <div class="input-group">
                                    <input name="lr_no" id="lr_no" class="form-control" placeholder="Enter L.R No" type="text">
                                    <span  class="input-group-btn">
                                    <button type="submit" id="get" class="site-button m-l10">Submit</button>
                                    </span> 
                                </div>
                            </form>
                         </div>
                      </div>
                   </div>
                 </div>
                </div>
            </div>

<script type="text/javascript">
 $("#get").click(function()
           console.log("hello");
           status_form();
           return false;
          );

     function status_form()
       
            var lr_no = $('#lr_no').val();
                     $.ajax(
                          url :"http://demo.barque.online/sitecontroller/StatusController/fetchStatus",
                          type:"POST",
                          dataType: "json",
                          data:
                            lr_no:lr_no,
                         ,
                          dataType: "html",
                          success: function(data)
                          
                            console.log(data);
                            // $('#status_table').html(data);
                            // //$('#consignor_name').trigger("change");
                            // enquiryStatus();

                          ,
                          error:function(data)
                          
                            alert("error message"+data);
                          ,async:false,
                      );    

      
</script>
<?php include 'footer.php'; ?>

这是我的第二个移除控制器:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class StatusController extends CI_Controller 

  public function __construct()
    
        parent::__construct();
        if(!is_logged_in()) 
        
             redirect("user/SigninController/"); 
        else
              $this->load->model("sitemodel/StatusModel",'sModel');
        
     
    function fetchStatus()
    $lr_no            = $this->input->post('lr_no');
    $statusResult     = $this->sModel->fetchStatus($lr_no);
    echo json_encode($statusResult);
    
   

这是我的模型:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class StatusModel extends CI_Model 
                 function fetchStatus($lr_no) 
                        $this->db->select('*'); 
                        $this->db->from('bilty');
                        $this->db->where('lr_no',$lr_no);           
                        $query = $this->db->get();
                         return $query->result();
                   
                

我收到这个错误

jquery.min.js:4 Access to XMLHttpRequest at 'http://demo.barque.online/sitecontroller/StatusController/fetchStatus' from origin 'http://barquetranslogistics.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

我不知道我的代码哪里错了。 我只是通过我的网站页面的 ajax 请求将 id(lr_no) 传递给其他项目控制器的函数

【问题讨论】:

为什么在 URL 中有两个控制器?? @DevsiOdedra sitecontroller(是我的目录名称)和StatusController 是我的控制器名称 【参考方案1】:

例如,您将 JS 托管在 http://barquetranslogistics.com(原点),而远程 PHP 服务器托管在 http://demo.barque.online,您可以使用此 PHP 标头从 JS 跨域发布:

public function __construct()

    header('Access-Control-Allow-Origin: http://barquetranslogistics.com');
    header('Access-Control-Allow-Credentials: true');
    header('Access-Control-Max-Age: 604800');
    header("Access-Control-Allow-Headers: Origin, Content-Type, Accept, Access-Control-Request-Method");
    header("Access-Control-Allow-Methods: GET, POST");
    parent::__construct();
    if(!is_logged_in()) 
    
        redirect("user/SigninController/"); 
    else
        $this->load->model("sitemodel/StatusModel",'sModel');
    

【讨论】:

【参考方案2】:

它说明了错误本身的一切。您正面临此错误,因为您没有在请求的域中设置 CORS 策略。不允许 Web 应用程序在其域之外发出请求,除非来自其他来源的响应包含正确的 CORS 标头。

您可以在此处阅读有关 CORS 政策的更多信息-

CORS Policy Docs

您可以使用CORS anywhere 或通过在其他来源设置 CORS 标头来解决此问题。希望对您有所帮助。

How to use CORS Anywhere

【讨论】:

以上是关于我正在将 ajax 请求传递给另一个远程服务器以获取访问记录的主要内容,如果未能解决你的问题,请参考以下文章

使用 Retrofit 发送 POST 请求并接收 Json 响应无法使用响应数据我需要将其传递给另一个活动

Ajax 请求 Codeigniter

Ajax 将格式化文本传递给另一个 php 文件并显示为在文本区域中

我正在尝试使用 WebView 登录页面将控制权传递给另一个 ViewController

如何使用ajax请求将印地语字体从客户端传递到服务器

HttpClient 将 ClaimsIdentity 传递给另一个 WebApi