我有一段非常短的PHP用于从JavaScript发出HTTP请求。
$.get("grabber.php?url=" + "http://tidesandcurrents.noaa.gov/api/datagetter?station=8573364&begin_date=20160202&end_date=20160203&product=predictions&units=english&time_zone=gmt&format=json&application=poseidonweathercom+&datum=MLLW", function(forecast) {
console.log(forecast);
});
我在一些项目中成功使用了它,但是在我当前项目中发出请求时遇到了问题。基于我的搜索,我相信它可能是由请求中的下划线引起的,虽然通过我的搜索而不知道PHP,我无法确认。
下面是我在JavaScript中做的一个例子:
{{1}}
如果我复制网址并将其放入浏览器中,我会收到我要求的JSON。当我使用上面的代码时,我最终收到来自NOAA的错误消息:
产品错误:产品不能为空或空错误时区:时区不能为空或空错误单位:单位不能为空或空错误格式:格式不能为空或空错误日期:beginDate不能为空或者空的
我是否需要在PHP中使用正则表达式作为下划线?还有其他一些我不明白的问题吗?
感谢。
答案 0 :(得分:1)
你需要发送编码,它会将所有下划线/空格/&符号等转换成编码的等价物:
var url = "http://tidesandcurrents.noaa.gov/api/datagetter?station=8573364&begin_date=20160202&end_date=20160203&product=predictions&units=english&time_zone=gmt&format=json&application=poseidonweathercom+&datum=MLLW";
$.get("grabber.php?url=" + encodeURIComponent(url), function(forecast){
console.log(forecast);
}
在该网址上使用encodeURIComponent()
显示:
http%3A%2F%2Ftidesandcurrents.noaa.gov%2Fapi%2Fdatagetter%3Fstation%3D8573364%26begin_date%3D20160202%26end_date%3D20160203%26product%3Dpredictions%26units%3Denglish%26time_zone%3Dgmt%26format%3Djson%26application%3Dposeidonweathercom%2B%26datum%3DMLLW
或者,如果您只想访问JSON数据并在JavaScript函数中处理它,您可以直接通过URL检索数据,而无需对URL进行编码:
$.get("http://tidesandcurrents.noaa.gov/api/datagetter?station=8573364&begin_date=20160202&end_date=20160203&product=predictions&units=english&time_zone=gmt&format=json&application=poseidonweathercom+&datum=MLLW", function(forecast) {
console.log(forecast);
});
答案 1 :(得分:0)
嗯,为什么你甚至需要你的PHP代码...下面的代码可以正常工作并消除你的服务器开销。
$.get("http://tidesandcurrents.noaa.gov/api/datagetter?station=8573364&begin_date=20160202&end_date=20160203&product=predictions&units=english&time_zone=gmt&format=json&application=poseidonweathercom+&datum=MLLW", function(forecast) {
console.log(forecast);
});