除了失败之外,我无法获得此请求。我已经使用curl和Web开发人员工具栏来检查创建的URL,WD总是说响应正确地返回为200.我已经尝试将内容类型更改为text,octet-stream并将其注释掉。我还采用了JSON响应并使用JSONLint对其进行了验证。
我使用的代码就是这个;
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<link rel="stylesheet" type="text/css" href="css/testing.css">
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js" ></script>
<script type="text/javascript">
$(function(){
$("body").append("<p>Testing.....</p>");
var test= {latitude:"37.0205",longitude:"-7.969141667",startDate:"09-01-2014",endDate:"09-02-2014"};
var url="<hidden>";
$.ajax({
url : url,
type: "GET",
data : test,
dataType:"json",
contentType:"application/json",
success: function(data,status)
{
$("body").append("<p>Success"+JSON.stringify(data)+"</p>");
$("body").append("<p>Success"+status+"</p>");
},
error: function (jqXhr,textStatus,errorThrown)
{
$("body").append("<p>Failure " + JSON.stringify(jqXhr)+"----- "+ textStatus+ "----- "+ errorThrown+"</p>");
}
});
$("body").append("<p>input"+JSON.stringify(test)+"</p>");
});
</script>
</head>
<body>
<h1>Weather test</h1>
</body>
</html>
错误功能在我的网络浏览器中的输出是&#34;失败{&#34; readyState&#34;:0,&#34; responseText&#34;:&#34;&#34;,& #34; status&#34;:0,&#34; statusText&#34;:&#34;错误&#34;} -----错误-----&#34;
标题的格式为
HTTP / 1.1 200 OK Cache-Control:private,max-age = 0服务器: Microsoft-IIS / 7.5 X-AspNet-Version:4.0.30319 X-Powered-By:ASP.NET 日期:星期五,03十月2014 11:57:47 GMT内容 - 长度:25328
并使用curl -ivs --raw来获取具有所有适当的get参数的url。在此之后直接跟随有效的JSON。我担心没有内容类型可能会抛出这个。
我知道还有很多其他类似的问题,但是我已经尝试过先解决这些问题并应用所吸取的教训。如果您有任何其他建议,我将非常感激。
谢谢,
答案 0 :(得分:7)
正如您所写,I'm running the web-page on a server on my home machine and the url is for a different, external server not under my control.
这通常意味着Same origin policy规则适用于此。
它不允许您轻松发送cross-domain ajax request。
答案 1 :(得分:1)
如果你能够使用curl检索url,但是你的ajax调用在浏览器中返回错误,这意味着url不支持CORS(Cross-origin resource sharing)并返回没有Allow-Control-Allow的响应头 - 您域名的原始许可。
由于网址是针对不受您控制的其他外部服务器,因此您无法启用Allow-Control-Allow-Origin标头,因此无法在客户端/ javascript级别正确解决此问题。
但是,如果您可以在服务器上创建一个使用curl检索外部URL的PHP脚本,并修改您的ajax来调用该PHP脚本,那么解决方案很简单。通过这种方式,您的ajax会调用本地URL,并且不再存在跨域问题。
您可以创建PHP脚本并将其命名为“local.php
”,将“your_external_url
”替换为您的网址:
<?php
$url = 'your_external_url';
$ch = curl_init($url.'?'.$_SERVER['QUERY_STRING']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
echo $result;
?>
并将您的ajax网址修改为“local.php
”:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<link rel="stylesheet" type="text/css" href="css/testing.css">
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js" ></script>
<script type="text/javascript">
$(function(){
$("body").append("<p>Testing.....</p>");
var test= {latitude:"37.0205",longitude:"-7.969141667",startDate:"09-01-2014",endDate:"09-02-2014"};
var url="local.php";
$.ajax({
url : url,
type: "GET",
data : test,
dataType:"json",
contentType:"application/json",
success: function(data,status)
{
$("body").append("<p>Success"+JSON.stringify(data)+"</p>");
$("body").append("<p>Success"+status+"</p>");
},
error: function (jqXhr,textStatus,errorThrown)
{
$("body").append("<p>Failure " + JSON.stringify(jqXhr)+"----- "+ textStatus+ "----- "+ errorThrown+"</p>");
}
});
$("body").append("<p>input"+JSON.stringify(test)+"</p>");
});
</script>
</head>
<body>
<h1>Weather test</h1>
</body>
</html>