我从一个朋友那里获得了一些代码,该代码向我展示了刮板如何以其最基本的形式工作。现在,该代码在他的本地环境下运行良好,并且在上载时可以正常运行。但是,将AJAX呼叫转移到我的计算机上似乎无效或无效。我在控制台中没有任何响应或错误,无法尝试将我指向正确的方向。
新开发环境-我最初运行XAMPP,并认为此设置可能会引起问题,所以我完全重新安装了Apache,PHP(7.3),MySQL ...
禁用的防火墙
尝试在每个PHP文件的顶部使用<?php header("Access-Control-Allow-Origin: *");
启用CORS
使用get()
代替ajax()
我想不出其他什么,但我在一夜之间做了很多拖网捕捞,似乎还没有遇到解决方案。我认为这是我的本地设置的问题,因为如果文件被上传,它们将起作用。如果我浏览到localhost/footy-api.php
,它会显示JSON(有错误,但这仅是错误的定位)。
有人对此有任何潜在的解决方案吗?
<!DOCTYPE html>
<html>
<head>
<title>Footy Theft</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="jsearch.css">
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<script src="https://use.fontawesome.com/8af6c2989d.js"></script>
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
<script type="text/javascript">
function SHOW(data) {
var HTML = '<hr/><table class="w3-table-all w3-hoverable"><tr><th>League</th><th>Home Boys</th><th>socre/time</th><th>visitors</th></tr>';
for(var ff=0; ff<data.length; ff++) {
//console.log(JSON.stringify(data[ff]));
var ROW = '<tr><td>'+ data[ff].league +'</td>';
ROW += '<td>'+ data[ff].team1 +'</td>';
ROW += '<td>'+ data[ff].info +'</td>';
ROW += '<td>'+ data[ff].team2 +'</td></tr>';
HTML += ROW;
};
HTML += '</table>';
$('#RESULTS').html(HTML);
};
function GO() {
$('#DEBUG').text(" Please wait, searching all the internets... ");
$.ajax({ url: "footy-api.php" })
.done(function(data) {
alert("ok");
$('#DEBUG').text(""); //JSON.stringify(data));
SHOW(data);
});
};
$(document).ready(function () {
GO();
});
</script>
</head>
<body>
<div class="w3-bar w3-black">
<span class="w3-bar-item w3-text-pink">Sweaty Sock Fights</span>
<a href="#" onclick="GO()" class="w3-bar-item w3-button w3-green"><i class="fa fa-search"></i></a>
</div>
<div id="DEBUG" class="w3-container w3-large"></div>
<div id="RESULTS" class="w3-container"></div>
</body>
</html>
<?php
header('Content-Type: text/json');
require('utils-php.php');
function BBC(&$BUILD) {
//$url="URL-TO-GRAB";
//$ch = curl_init();
//curl_setopt($ch, CURLOPT_URL, $url);
//curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
//$GRAB = curl_exec($ch);
//curl_close($ch);
$GRAB = file_get_contents('https://www.bbc.co.uk/sport/football/highland-league/scores-fixtures');
$HITS = explode( '<article ', $GRAB );
for( $hh=1; $hh<count($HITS); $hh++ ) {
$INFO = null;
$INFO->site = "BBC";
$INFO->game = $hh."/".(count($HITS)-1);
$INFO->league = TextBetween($HITS[$hh], '$0', '.');
$INFO->team1 = TextBetween($HITS[$hh], '<abbr title="', '"');
$INFO->team2 = TextBetween(TextAfter($HITS[$hh], 'fixture__team--time-away'), '<abbr title="', '"');
$INFO->info = TextAfter(TextBetween($HITS[$hh], 'fixture__number--time', '</span>'), '>');
if(strlen($INFO->league)>1) array_push($BUILD, $INFO);
}
}
$ALL = array();
BBC($ALL);
$FINAL = str_replace("\/", "/", json_encode($ALL));
$FINAL = str_replace("\'", "'", $FINAL);
echo $FINAL;
?>
答案 0 :(得分:1)
使用上述调试方法后,我发现文件返回200,而且似乎正确找到了。运行.fail()
并记录它返回错误Creating default object from empty value in...
与同事交谈后,事实证明,这是初始化新对象的方式。
已更改:
$INFO = null;
至:
$INFO = new stdClass();
一切正常。