NetworkError:无法在'XMLHttpRequest'上执行'send'

时间:2015-10-01 02:41:30

标签: jquery ajax http-post

我正在尝试向我的笔记本电脑本地托管的服务器发出POST ajax请求,但我似乎无法获得任何信息。当我单击我的站点上的一个按钮(localhost)时,我可以看到服务器传回正确的信息,但在前端我收到此错误:

  

错误:NetworkError:无法在'XMLHttpRequest'上执行'send':无法加载“http://comp-ip”。

var param = JSON.stringify({varA:"varA",varB:"varB"});

$.ajax({
  type: "POST", 
  url: "http://comp-ip",
  async: false, 
  data: param,
  success: function(result, status, xhr){
    alert(result + ": " + status);
  },
  error: function(xhr, status, err) {
    alert(status + ": " + err);
  }
});

似乎每次都会触发错误,而不是“成功”。任何人都知道出了什么问题?

编辑:我已尝试在没有AJAX的情况下发送正常的POST请求,它也会引发“未定义”错误:

$(document).ready(function(){
    var param = JSON.stringify({varA:"varA",varB:"varB"});
     $("#btn").click(function(event){
           $.post( 
              "http://ip",
               param,
               function(data) {
                 $('#container').html(data);
               }
           ).fail(function(error) { alert(error.responseJSON) });
        });
});

我尝试过的其他事情: 1)将浏览器更改为Safari(同样,服务器返回信息但网站出错) 2)从false设置async = true。出于某种原因,当我将其设置为true时,服务器根本不响应。当它为假时,服务器响应。

4 个答案:

答案 0 :(得分:9)

几分钟前,我确实遇到了这个问题。问题是您需要将async:false设置为async:true。我不确定为什么这会有效,我想因为HTML5比XML更新。

此网站上的错误略有不同,但我认为它类似:JavaScript console.log causes error: "Synchronous XMLHttpRequest on the main thread is deprecated..."

更新

嗨,我回来了一些新的和改进的信息。 Cross-Origin与端口以及域/ IP一起发生,并且可能与大多数不错的浏览器一起使用。如果您想知道发生了什么,请尝试将IP更改为localhost,反之亦然(如果您使用的是localhost)。请记住,当您使用不同的端口时也会发生此问题。要快速解决此问题,请确保在后端服务器的标头中放置正确的Access-Control标头response.addHeader("Access-Control-Allow-Origin", "*");

代码源自this question

答案 1 :(得分:5)

这是一个跨源资源问题(CORS)。我的服务器正在向我返回正确的信息,但我的浏览器拒绝接受它。要修复它,我必须在我的java服务器(不是我的网站)上添加2行,将它们设置为响应标题

namespace ConsoleSinglePortMonitor {
    class Program
    {
        static bool _continue;
        static SerialPort _serialPort;

        public static void Main()
        {
            string name;
            string message;
            StringComparer stringComparer = StringComparer.OrdinalIgnoreCase;
            Thread readThread = new Thread(Read);

            // Create a new SerialPort object with default settings.
            _serialPort = new SerialPort();

            // Allow the user to set the appropriate properties.
            _serialPort.PortName = SetPortName(_serialPort.PortName);
            _serialPort.BaudRate = SetPortBaudRate(_serialPort.BaudRate);
            _serialPort.Parity = SetPortParity(_serialPort.Parity);
            _serialPort.DataBits = SetPortDataBits(_serialPort.DataBits);
            _serialPort.StopBits = SetPortStopBits(_serialPort.StopBits);
            _serialPort.Handshake = SetPortHandshake(_serialPort.Handshake);

            // Set the read/write timeouts
            _serialPort.ReadTimeout = 500;
            _serialPort.WriteTimeout = 500;

            _serialPort.Open();
            _continue = true;
            readThread.Start();

            Console.Write("Name: ");
            name = Console.ReadLine();

            Console.WriteLine("Type QUIT to exit");

            while (_continue)
            {
                message = Console.ReadLine();

                if (stringComparer.Equals("quit", message))
                {
                    _continue = false;
                }
                else
                {
                    _serialPort.WriteLine(
                        String.Format("<{0}>: {1}", name, message));
                }
            }

            readThread.Join();
            _serialPort.Close();
        }

        public static void Read()
        {
            while (_continue)
            {
                try
                {
                    string message = _serialPort.ReadLine();
                    Console.WriteLine(message);
                }
                catch (TimeoutException) { }
            }
        }

        public static string SetPortName(string defaultPortName)
        {
            string portName;

            Console.WriteLine("Available Ports:");
            foreach (string s in SerialPort.GetPortNames())
            {
                Console.WriteLine("   {0}", s);
            }

            Console.Write("COM port({0}): ", defaultPortName);
            portName = Console.ReadLine();

            if (portName == "")
            {
                portName = defaultPortName;
            }
            else
            {
                portName = "COM" + portName;
            }
            return portName;
        }

        public static int SetPortBaudRate(int defaultPortBaudRate)
        {
            string baudRate;

            Console.Write("Baud Rate({0}): ", defaultPortBaudRate);
            baudRate = Console.ReadLine();

            if (baudRate == "")
            {
                baudRate = defaultPortBaudRate.ToString();
            }

            return int.Parse(baudRate);
        }

        public static Parity SetPortParity(Parity defaultPortParity)
        {
            string parity;

            Console.WriteLine("Available Parity options:");
            foreach (string s in Enum.GetNames(typeof(Parity)))
            {
                Console.WriteLine("   {0}", s);
            }

            Console.Write("Parity({0}):", defaultPortParity.ToString());
            parity = Console.ReadLine();

            if (parity == "")
            {
                parity = defaultPortParity.ToString();
            }

            return (Parity)Enum.Parse(typeof(Parity), parity);
        }

        public static int SetPortDataBits(int defaultPortDataBits)
        {
            string dataBits;

            Console.Write("Data Bits({0}): ", defaultPortDataBits);
            dataBits = Console.ReadLine();

            if (dataBits == "")
            {
                dataBits = defaultPortDataBits.ToString();
            }

            return int.Parse(dataBits);
        }

        public static StopBits SetPortStopBits(StopBits defaultPortStopBits)
        {
            string stopBits;

            Console.WriteLine("Available Stop Bits options:");
            foreach (string s in Enum.GetNames(typeof(StopBits)))
            {
                Console.WriteLine("   {0}", s);
            }

            Console.Write("Stop Bits({0}):", defaultPortStopBits.ToString());
            stopBits = Console.ReadLine();

            if (stopBits == "")
            {
                stopBits = defaultPortStopBits.ToString();
            }

            return (StopBits)Enum.Parse(typeof(StopBits), stopBits);
        }

        public static Handshake SetPortHandshake(Handshake defaultPortHandshake)
        {
            string handshake;

            Console.WriteLine("Available Handshake options:");
            foreach (string s in Enum.GetNames(typeof(Handshake)))
            {
                Console.WriteLine("   {0}", s);
            }

            Console.Write("Handshake({0}):", defaultPortHandshake.ToString());
            handshake = Console.ReadLine();

            if (handshake == "")
            {
                handshake = defaultPortHandshake.ToString();
            }

            return (Handshake)Enum.Parse(typeof(Handshake), handshake);
        }
    } }

答案 2 :(得分:0)

我遇到了同样的问题,并且出现了相同的错误消息。在我的情况下,这是由服务器使用if(!defined('PROTECT') || PROTECT!=42) exit 设置了Feature-Policy头引起的。删除此指令可解决此问题。

答案 3 :(得分:-3)

您可以在Windows上使用Chrome浏览器测试您的网页

chrome.exe --allow-file-access-from-files