我可以使用jquery在我的网站公共目录上调用ajax函数吗?
我一直在尝试建立一个基本的网站登录系统。现在,在将凭据发送到数据库之前,我一直在进行错误验证。我的问题是:我对网站架构的理解很幼稚&我对AJAX和JQuery缺乏熟练。我会尽量使我的问题尽可能简洁,但我保证在这里的某个地方我会问一个愚蠢的问题:S 我的工作范围: 我正在尝试设置一个非常简单的web前端,它可以与我先前存在的SQL后端交互。我还试图将我与后端的大部分交互与我的公共html文件分开。因此混淆了所有真正重要的东西(数据库凭证、SQL交互等)。这使得邪恶的个人很难破坏我的后端框架。我想你可以说我是为了网络“安全”,因为我几乎所有的文件(除了2,login.php和loggedIn.php)都不能被任何不能直接访问服务器的人读取 例如 我的网页目录:我可以使用jquery在我的网站公共目录上调用ajax函数吗?,jquery,html,ajax,Jquery,Html,Ajax,我一直在尝试建立一个基本的网站登录系统。现在,在将凭据发送到数据库之前,我一直在进行错误验证。我的问题是:我对网站架构的理解很幼稚&我对AJAX和JQuery缺乏熟练。我会尽量使我的问题尽可能简洁,但我保证在这里的某个地方我会问一个愚蠢的问题:S 我的工作范围: 我正在尝试设置一个非常简单的web前端,它可以与我先前存在的SQL后端交互。我还试图将我与后端的大部分交互与我的公共html文件分开。因此混淆了所有真正重要的东西(数据库凭证、SQL交互等)。这使得邪恶的个人很难破坏我的后端框架。我想你
secrets
public_html
-MyWebsite
secrets
public_html
I
-MyWebsite
I
--login.php
--Jquery.js
--Ajax.php
如果:
我将login.php、Jquery.js和Ajax.php文件都放在“public_html/MyWebsite”中,效果很好
我的网页目录:
secrets
public_html
-MyWebsite
secrets
public_html
I
-MyWebsite
I
--login.php
--Jquery.js
--Ajax.php
但是
如果我改变文件的位置,事情就开始崩溃。我想象这是因为我的代码中有一些我似乎看不到的东西。还是我的架构/逻辑中的一个超级天真的错误
这就是我试图实现的体系结构:
secrets
I
--Jquery1.js
--Ajax.php
*************
public_html
I
-MyWebsite
I
--login.php (with a few Jquery/Ajax calls)
--loggedIn.php ( interspersed referencing my core files ^)
--Jquery.js
我之所以试图做到这一点,是因为在实践中,如果我们有这两个在线直播。如果我们导航到:
www.MyWebsite.com/MyWebsite/login.php
上面的案例1和案例2^都将带我们进入login.php 但是,如果我们输入: www.MyWebsite.com/MyWebsite/Jquery.js 案例1
将以纯文本形式介绍Jquery.js。任何想查看它的人都可以100%看到它 案例2将给我们带来404。问题解决了,所有JQuery对世界都是不可见的 这同样适用于AJAX,但是AJAX只会产生调用的结果。所以,对网络安全没有那么大的危害,但仍然是一个令人沮丧的人 所以。就目前而言,案例1对我来说很好,但我不明白为什么案例2不会。再次,请原谅我,如果这是一个非常愚蠢的我显然不是一个“专业”本身。但我将尝试提供尽可能多的经过清理的代码,以使这一点尽可能简单明了,而对web架构的了解很少 案例1代码 login.php
登录
Jquery.js
$(文档).ready(函数()
{
$('#logForm')。提交(函数(事件)
{
$('.form group').removeClass('has-error');
$('.help块').remove();
变量日志数据={
'userName':$('input[name=txtUserName]).val()
}
$.ajax({
类型:'POST',//表单类型
url:'Ajax.php',
数据:日志数据,
数据类型:“json”,//返回期望值,
编码:正确
})
.完成(功能(数据)
{
如果(!data.success)
{
if(data.errors.userName)
{
$(“#用户名组”).addClass('has-error');
$(“#用户名组”).append(“”+data.errors.userName+“”);
}
}
其他的
{
//开始做数据库的事情
}
})
.失败(功能(数据)
{
});
event.preventDefault();
});
});
函数formBuild(){
$('body')。追加('');
$(“#主体”)。附加(“”);
$(“#logForm”).append(“所有js/css/图像都在客户端工作(节点除外),这意味着它需要下载才能工作,因此它应该位于公共html文件夹中,因为它需要由最终用户浏览器检索才能执行。首先,请阅读如何创建一个,重点是“最小”在这个问题中有大量不必要的信息。寻求调试帮助的问题(“为什么这个代码不工作?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现这些问题所需的最短代码。没有明确问题陈述的问题对其他读者来说是没有用处的。请参阅:第二,不,出于充分的理由,您不能使用AJAX调用无法通过web访问的内容。想象一下,如果可以的话;您可以不费吹灰之力地检查任何网站。你必须让用户能够访问你的AJAX端点;AJAX并不能绕过服务器对它将提供哪些目录和文件的限制。@EdCottrell谢谢你,Ed!在我下一篇文章发表之前,这将是我的一篇文章!这里再次强调,超级不专业。所以我想问一个问题这是一个愚蠢的问题。JQuery必须在public_html中,AJAX可以在my secrets文件夹中?不,您希望通过web直接访问的所有内容都必须在服务器的目标文件夹中。包括页面、图像、脚本(包括JQuery),以及您希望通过AJAX调用的任何内容。如果您将某个内容放在一个私人的、不可通过web访问的文件夹中,则无法直接通过web访问该文件夹。这就像将通知锁在壁橱的保险箱中,试图将通知放在办公室门上一样;这样做行不通。非常感谢!因此,JQuery不可能存在于外部公共html?
<?php
$inputUser= $_POST['userName'];
if (empty($inputUser))
{
$errors['userName'] = 'Username is required';
}
if (!empty($inputUser))
{
$errors['userName'] = 'You have to enter a Username';
}
if (!empty($errors))
{
//RETURN ERROR DATA
$data['success'] = false;
$data['errors'] = $errors;
$_SESSION['Fail'] = "True";
}
else
{
//ALL ERRORS PASSED
//DO DB STUFF
}
//Return Data to form. - Errors
echo json_encode($data);
?>
<?php
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/js/bootstrap.min.js"></script>
<script src="Jquery1.js" type="text/javascript"></script>
<title>Login</title>
</head>
<body onload="populatePage()">
</body>
</html>
$(document).ready(function()
{
});
function formBuild() {
$('body').append('<div class="container" id="MainBody"></div>');
$("#MainBody").append('<form class="form-horizontal" role="form" id="logForm" name="" method="POST" action=""></form>');
$("#logForm").append('<div id="userName-group" class="form-group"</div>');
$("#userName-group").append('<label for="txtUserName" class="col-sm-2 control-label">Username:</label>');
$("#logForm").append('<div class="form-group" id="btnSubby"></div>');
$("#btnSubby").append('<div class="col-sm-10 col-sm-offset-2"><button type="submit" class="btn btn-success">Submit <span class="fa fa-arrow-right"></span></button></div>');
$("#MainBody").append('<div class="form-group" id="btnNeggy"></div>');
$("#MainBody").append('<div class="container text-right "><button class="btn btn-warning" onclick="checkError()">Help Me<span class="fa fa-arrow-right"></span></button></div>');
}
function checkError()
{
// CALL JQuery FILE FROM OUTSIDE WEB DIRECTORY*******
$.ajax({url: "config/Jquery1.js", dataType: "script", success: function(TestLogin){}});
//*******PROBABLY WHERE THINGS ARE GOING WRONG?******
}
<?php
function Login()
{
$inputUser = $_POST['userName'];
if (!empty($inputUser))
{
}
else
{
$errors['userName'] = 'Username is required';
}
if (!empty($errors))
{
//RETURN ERROR DATA
$data['success'] = false;
$data['errors'] = $errors;
$_SESSION['Fail'] = "True";
}
}
//RETURN VABIABLE DECLARATION
echo json_encode($data);
?>
function TestLogin()
{
$('.form-group').removeClass('has-error');
$('.help-block').remove();
var logData = {
'userName': $('input[name=txtUserName]').val()
}
$.ajax({
type : 'POST', //Form Type
url : 'Ajax.php',
data : logData,
dataType : 'json', // Return Expectation,
encode : true,
success : function(Login){
//SUCCEED AND MESS WITH DB
//IT NEVER SEEMS TO MAKE IT HERE?
}
})
.done(function(data)
{
if(!data.success)
{
if (data.errors.userName)
{
$('#userName-group').addClass('has-error');
$('#userName-group').append('<div class="help-block">' + data.errors.userName+ '</div>');
}
}
else
{
//FAILURE CONDITIONS
}
})
.fail(function(data)
{
});
event.preventDefault();
}
function checkError()
{
//AGAIN, TEST BUTTON TO HIDE FORM AND SEE IF COMMUNICATION IS TAKING PLACE
$("#logForm").hide();
}