【问题标题】:OPTIONS request being made for $.ajax正在为 $.ajax 发出 OPTIONS 请求
【发布时间】:2026-02-11 13:15:02
【问题描述】:

我有以下代码,目前我正在本地机器上运行。我正在调用一个名为 getxml.php 的 php 脚本,它应该发送一个 xml 文件的内容作为响应。

但是,在 Firebug 中,我看到正在发出 OPTIONS 请求,而不是 GET 请求,例如 选项 getxml.php 。我认为我没有发出跨域 Ajax 请求,但仍然面临这个问题。有什么办法解决这个问题?

var employee_list = new Object; 
$(function(){
                $.ajax({
                type:"GET",
                url:"http://localhost/projectname/getxml.php",
                datatype:"xml",
                success: function(xml){
                    $(xml).find('employee').each(function(){
                        var name_text = $(this).find('name').text();
                        var url_text = $(this).find('url').text();
                        employee_list[name_text] = url_text;
                        $('<li></li>').html(name_text + ' (' + url_text + ')').appendTo('#update-target ol');

                    });
                } //closing function        
             }); //closing $.ajax

}); //closing $(

getxml.php

<?php
    //Send the xml file as response
    header('Content-type: text/xml');
    readfile('employee_results.xml');
?>  

谢谢

【问题讨论】:

  • php中的xml在哪里?你只需发送一些标题
  • 感谢streetparade的回复。readfile()函数读取xml文件的内容并发送出去。
  • 在 HTTP 中确实没有 OPTIONS 请求这样的东西。即使您设置datatype:"OPTIONS",底层XHR 对象也不会理解这一点。是什么让你相信 HTTP 动词是“OPTIONS”?
  • 直接在浏览器中查看getxml.php url会发生什么?

标签: php jquery xml ajax


【解决方案1】:

确保 getxml.php 存在。 OPTIONS 通常意味着您有轻微的拼写错误。

【讨论】:

  • 感谢兰布林伍德的回复。我确保 getxml.php 存在。我的项目文件夹包含一个 js 子文件夹、getxml.php、xml 文件本身和一个包含上述 javascript 的 index.html 页面。js 子文件夹包含 jquery 库
【解决方案2】:

datatype 更改为dataType,看看是否能解决您的问题。其余代码看起来正确。

编辑:另外,我不是 PHP 专业人士,但我编写了一个使用类似方法的地图应用程序。要返回 xml,我使用了:

header("Status: 200");
header("Content-type: text/xml");
echo  file_get_contents($q,0); /*$q is the query/filename*/  
exit();

我记得在某处读到需要header("Status: 200");

编辑:这是我做同样事情的方式。我希望这会有所帮助。

 /* call ajax method to retrieve earthquakes */
  $.ajax({
    type: "GET",
    url: "../getxml.php?q=" + xmlLocation, 
    dataType: "xml",
    success: function(xml){
            $(xml).find('entry').each(function(){
                /* Retrieve all needed values from XML */
                var title = $(this).find('title').text();
                var summary = $(this).find('summary').text();
                var coord = $(this).find('georss\\:point').eq(0).text();
                if(!coord){var coord = $(this).find('point').text();}; 
                var points = coord.split(' ');
                var latitude = parseFloat(points[0]);
                var longitude = parseFloat(points[1]);  
                var htmlString = "<div class=\"infowindow\"><b>" + 
                                title + "</b>" + "<p>" + summary + "<br></div>";
                var myLatlng = new google.maps.LatLng(latitude,longitude);
                var marker = new google.maps.Marker(
                {
                 position: myLatlng,
                 map: map,
                 title: title
                });
                markers[markers.length] = marker;
                addInfoWindow(marker, map, htmlString);

                $('#output').text("Showing " + markers.length + " earthquakes");
            });/*  end each */
        }
    }); /* end $.ajax */

php 文件与我在上面发布的完全一样,但具有“安全性”以仅响应 ajax 请求。

【讨论】:

  • 感谢吉姆的回复。我做了你建议的改变,但仍然有同样的问题:(
  • 这很奇怪。我将添加一个示例,说明如何从 USGS.gov 为我制作的地震跟踪器提取地震 XML 提要:ipreferjim.com/maps/quakes.html
最近更新 更多