我正在尝试学习如何在网站上构建图片库。我正在使用.html / .css / .js文件创建页面。我在 Web 服务器上还有一个图像文件夹,其中包含任意数量的图像。我的目标是将包含该文件夹中每个图像 URL 的img标签注入到我的 html 中的照片 div中。
我编写了以下php 脚本,我在服务器上也有:
<?php
$imagesDir = '../images/art/';
$images = glob($imagesDir . '*.{jpg,jpeg,png,gif}', GLOB_BRACE);
echo json_encode($images);
?>
我意识到我可以通过 php 脚本生成整个 html 并绕过 AJAX,但是我不想这样做,因为学习是我的主要目标,我想学习如何通过 AJAX 与 php 交互。
当我在 Web 浏览器中访问 URL ( http://www.fakedomain.com/php/images.php ) 时,php 脚本的输出格式如下:
[
"../images/art/art01.jpg",
"../images/art/art02.jpg",
"../images/art/art03.jpg",
"../images/art/art04.jpg"
]
然后我尝试在我的 javascript 中进行 AJAX 调用以从 php 文件中检索 JSON。
$.getJSON('http://www.fakedomain.com/php/images.php', function(images) {
$.each(images, function(i, image) {
$("#photos").append("<a class='fancybox' rel='group' src='" + image + "'/><img src='" + image + "'/></a>");
});
});
尽管从我看过的其他帖子中这看起来应该非常简单,但我得到了错误,并且似乎没有代码在回调函数中执行。我什至刚刚尝试在页面上直接在 Chrome Javascript 控制台中调用下面的 javascript,但我得到了一个冗长的错误。
进入 Chrome Javascript 控制台:
$.getJSON('http://www.domain.com/php/images.php', function(images) { console.log("test") });
冗长的错误:
Object {readyState: 1, getResponseHeader: function, getAllResponseHeaders: function, setRequestHeader: function, overrideMimeType: function…}
abort: function (e){var t=e||T;return l&&l.abort(t),k(0,t),this}
always: function (){return i.done(arguments).fail(arguments),this}
complete: function (){if(u){var t=u.length;(function i(t){b.each(t,function(t,n){var r=b.type(n);"function"===r?e.unique&&p.has(n)||u.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=u.length:r&&(s=t,c(r))}return this}
done: function (){if(u){var t=u.length;(function i(t){b.each(t,function(t,n){var r=b.type(n);"function"===r?e.unique&&p.has(n)||u.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=u.length:r&&(s=t,c(r))}return this}
error: function (){if(u){var t=u.length;(function i(t){b.each(t,function(t,n){var r=b.type(n);"function"===r?e.unique&&p.has(n)||u.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=u.length:r&&(s=t,c(r))}return this}
fail: function (){if(u){var t=u.length;(function i(t){b.each(t,function(t,n){var r=b.type(n);"function"===r?e.unique&&p.has(n)||u.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=u.length:r&&(s=t,c(r))}return this}
getAllResponseHeaders: function (){return 2===x?a:null}
getResponseHeader: function (e){var t;if(2===x){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t}
overrideMimeType: function (e){return x||(p.mimeType=e),this}
pipe: function (){var e=arguments;return b.Deferred(function(n){b.each(t,function(t,o){var a=o[0],s=b.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&b.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()}
progress: function (){if(u){var t=u.length;(function i(t){b.each(t,function(t,n){var r=b.type(n);"function"===r?e.unique&&p.has(n)||u.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=u.length:r&&(s=t,c(r))}return this}
promise: function (e){return null!=e?b.extend(e,r):r}
readyState: 0
responseText: ""
setRequestHeader: function (e,t){var n=e.toLowerCase();return x||(e=v[n]=v[n]||e,y[e]=t),this}
state: function (){return n}
status: 0
statusCode: function (e){var t;if(e)if(2>x)for(t in e)m[t]=[m[t],e[t]];else N.always(e[N.status]);return this}
statusText: "error"
success: function (){if(u){var t=u.length;(function i(t){b.each(t,function(t,n){var r=b.type(n);"function"===r?e.unique&&p.has(n)||u.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=u.length:r&&(s=t,c(r))}return this}
then: function (){var e=arguments;return b.Deferred(function(n){b.each(t,function(t,o){var a=o[0],s=b.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&b.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()}
__proto__: Object
我将不胜感激任何帮助。我已经阅读了许多类似的 StackOverflow 帖子并尝试了他们的解决方案但没有成功。我觉得我必须在这里遗漏一些基本的东西。
非常感谢您抽出宝贵时间提供帮助。
编辑:
Arun 的评论让我知道我需要从同一个域调用 php 脚本,这是引导我通过将我的代码部署到 php 脚本所在的 Web 服务器来解决此问题的线索。即便如此,当我的 AJAX 使用绝对路径调用 php 脚本时,我还是遇到了错误。一旦我切换到使用相对路径,它就可以正常工作。任何想法为什么?