我正在尝试向我的笔记本电脑本地托管的服务器发出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时,服务器根本不响应。当它为假时,服务器响应。
答案 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