我在网站上遇到一些麻烦,试图续订 在头部中,使用名称“jquery.script.js”调用脚本,其中包含一些代码
$.ajax({
url: 'function.js.php?option=urlget&id='+movie_id,
dataType: 'json',
success: function(data){
fanarturl = data['url'];
alert(fanarturl);
alert(data.toSource());
if (data) {
$('#background').fadeOut(500, function(){
$(this).delay(100).attr('src', 'cache/'+movie_id+'_f.jpg');
$(this).fadeIn(500);
})
}
}
});
所以这个调用是一个名为“function.js.php”的文件。
if ($option == 'urlget') {
require('function.php');
$fan = get_fanart($mysql_tables, $_GET['id']);
$fan_js = array(
'url' => (isset($fan['url']) ? $fan['url'] : ''),
);
echo json_encode($fan_js);
}
此调用是一个函数:
function get_fanart($mysql_tables, $movie_id) {
$pos = strrpos($movie_id, "_");
$MovieID = substr($movie_id, ($pos + 1));
if(is_numeric($MovieID)){
$img_sql = 'SELECT id, url FROM ' . $mysql_tables[5]. ' WHERE type="fanart" AND id="'.$MovieID.'"';
$img_result = @mysql_query($img_sql);
if ($img_result) {
$get_img = mysql_fetch_assoc($img_result);
foreach($get_img as $key => $val) {
$fanart[$key] = $val;
}
}
return $fanart;
}}
“jquery.script.js”中的alart显示:({url:“”})
现在的问题是,当我将代码从“function.js.php”复制到“index.php”时
它显示如下:
{“url”:“http://image.tmdb.org/t/p/original/A82GPC0XeoZMBWDYTe4Dba32cme.jpg”}
为什么这个URL没有传递给“jquery.script.js”文件?
提前致谢!
答案 0 :(得分:1)
在function.js.php的开头你已经得到了这个:
if ($option == 'urlget') {
它不应该是$option
,它应该是$_GET['option']
。 (或类似的东西 - 我的PHP有点生锈。)
答案 1 :(得分:0)
不可否认,这种答案更适合于codereview.stackexchange.com,但您的代码存在大量含糊不清和安全漏洞。
var promise = $.ajax({
url: 'function.js.php?option=urlget&id='+movie_id,
dataType: 'json'
});
// This makes for better readability than a nest of callbacks
promise.done(function(data){
console.log(data);
$('#background').fadeOut(500, function(){
$(this).delay(100)
.attr('src', 'cache/'+movie_id+'_f.jpg')
.fadeIn(500);
});
});
promise.fail(function(data){
console.log('oh noes!', data); // @todo what do we do when 'function.js.php' fails?
});
function.js.php
。请注意,我们会根据结果返回不同的HTTP响应代码。
// @todo fill in db credentials
$db = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
$option = $_GET('option');
if ($option === 'urlget') {
require('function.php');
$fan_art = get_fanart($mysql_tables, intval($_GET['id']), $db);
if ($fan_art && count($fan_art)) {
http_response_code(200);
echo json_encode($fan_art);
} else if (is_array($fan_art)) {
http_response_code(404);
echo json_encode(array('errors' => array('no fan_art found')));
} else {
http_response_code(500);
echo json_encode(array('errors' => array('an error occured when fetching fan art')));
}
}
function.php
。请注意,这里我们传入数据库连接并使用绑定参数将变量插入到SQL中。
/**
*
* @param [String] $table - the table to fetch data from
* @param [Int] $movie_id
* @param [PDO] $db - A PDO database connection
* @return [False, Array] Returns false if query fails, otherwise returns array of results
*/
function get_fanart($table, $movie_id, $db) {
$statement = $db->prepare( "SELECT id, url FROM :table WHERE type = 'fanart' AND id = :id" );
$sth->bindParam(':table', $table); // default param type is string
$sth->bindParam(':id', $movie_id, PDO::PARAM_INT);
if ( $sth->execute() ) {
return $sth->fetchAll();
} else {
return false;
}
}
在旁边评论中,您的文件&变量命名方案非常可怕。命名文件.js.php
意味着PHP文件呈现javascript。同样命名文件function
或functions
是一个维护性的噩梦 - 为什么不fan_art.json.php
和fan_art.php
。