如何使用jQuery封装ajax请求?

时间:2011-08-17 12:33:06

标签: jquery ajax encapsulation

我正在实现一个PHP应用程序,我在表单中大量使用AJAX来发送和检索值。我正在实现的典型jQuery函数是

(function($){
$.fn.saveCountry = function(destinationUrl) {
    this.click(function(){
        var formData = $('form').serialize();
        $.ajax({
            type: 'POST',
            url:  'path/to/files/models/directory/process.php',
            data: 'option=savecountry&'+formData,
            success: function(msg){
                if(msg === 'empty') {
                    alert('Required Values Missing');
                } else if(msg == 'DR'){
                    alert('Duplicate Entry Found');
                } else {
                    destinationUrl(msg);
                }
            }
        });
    });
}
}($));

上述函数的问题是它暴露了我的应用程序的应用程序结构。对象url: 'path/to/files/models/directory/process.php',显示有关我正在使用的目录结构的信息。这是一种威胁,因为任何有权访问控制台的人都能够监视请求发生的事情,并可能滥用它。无论如何我可以从外界隐藏这些数据吗?

谢谢。

3 个答案:

答案 0 :(得分:3)

最终没有。

如果愿意,用户将始终能够找到ajax请求的URL。

这可以像打开萤火虫和观察所提出的请求一样简单。

我所采用的是某种URL重写,例如URL重写,以隐藏文件系统的物理结构。这样,您就不会对人们看到您的网址感到特别关注。

答案 1 :(得分:2)

我不是一名PHP程序员(多年前就触及过它),所以我会给你一个通用答案。

只需创建一个代理页面,该页面隐藏了应用程序的内部工作方式。代理页面只是浏览器和应用程序本身之间的内容。它的作用是将您传递的ID与AJAX调用一起转换为应用程序中的函数(它可以做更多的事情,但我试着保持这个简单)。它传递您在AJax调用中提交的数据。代理会将从函数传回的任何数据发回给浏览器。

JavaScript代码看起来与您已有的代码几乎相同。唯一的变化是url将是您的代理页面的URL,而data也将包含一个ID,其值对应于您希望在该代理页面中执行的函数的值代理。

您可以通过此代理页面路由所有AJAX调用,因为每个函数都有唯一的ID。

这是一个预先编程的方法,但是当你完成这一步时,你可以在将来的项目中重用部分代码。

答案 2 :(得分:0)

没有。您需要以任意请求不会导致任何问题的方式编写服务器端代码。