使用jquery / ajax在加载页面之前检查页面的可用性

时间:2012-10-26 10:15:23

标签: javascript jquery

在加载页面之前是否可以检查页面的辅助功能?

我有一张表格,使用无线连接在移动设备上运行。问题是:并非总是可以使用此连接,我想在提交或卸载页面时提醒用户。

问题是该页面包含执行重定向的元素,如下所示:

<input type="button" value="MyText" onClick="script1;script2;...window.location='mylocation'" />

如果用户点击此按钮并且服务器无法实现,我将会发现一些不可忽视的错误。

另外,如果我想概括我的脚本,我以前不知道“mylocation”的价值。

该页面还包含提交表单的元素:

<input type="submit" name="SUBMIT" value="MyValue" onClick="return eval('validationForm()')" />

对于提交我正在使用 ajaxForm 插件,它运行良好。

4 个答案:

答案 0 :(得分:3)

导航回来很容易使用它:

<input type="button" value="Back" onClick="window.location='history.go(-1);" >

其中-1表示上一页。如果要重新加载当前页面,请使用0,向前导航,使用1等

如果你使用来自jquery的ajax,它可以自己处理它... http://api.jquery.com/jQuery.ajax/

$.ajax({
        ///... need argument here...

        timeout: 5000, // in milliseconds
        success: function(data) {
             //Do something success
        },
        error: function(request, status, err) {
            if(status == "timeout") {
               alert("can't reach the server");
            }
        }
    });

评论后编辑: 你可以查看How do I check if file exists in jQuery or JavaScript? 在你的情况下,这可以按预期工作:

//Initialize the var as global so you can use it in the function below
var goto_url = "http://www.mywebsites.com/foo.html"; 

$.ajax({
    url:goto_url;
    type:'HEAD',
    error: function()
    {
        //do something if the gile is not found
    },
    success: function()
    {
         document.location = goto_url; //docuemnt.location will redirect the user to the specified value.
    }
});

这实际上会检查文件是否存在..如果它无法连接到文件,它将无法找到它.. 如果他能找到该文件,他显然能够连接,所以无论哪种情况你都赢了。

喝彩!

答案 1 :(得分:1)

您应该使用jQuery Ajax函数的回调来捕获服务器不可用的问题。

您无法在不向其提出请求的情况下检查服务器的可用性。

答案 2 :(得分:1)

感谢您的回答,我找到了问题的解决方案。 在启动脚本和重定向之前,检查服务器是否可以实现。 那是代码:

 function checkConnection(u,s){
    $.ajax({
        url:u,
        cache:false,
        timeout:3000,
        error: function(jqXHR, textStatus)
        {
            alert("Request failed: " + textStatus ); 
        },
        success: function()
        {
            eval(s);   
        }
    });       
 }      

    $(document).ready(function() {
        // part of the function that checks buttons with redirect
        // for any button that contain a redirect on onClick attribute ("window.locarion=")
        $("input[type=button]").each(function(){
            var script = $(this).attr("onClick"); 
            var url = "my_url";
            var position = script.indexOf("window.location") ;  
            if (position >= 0) {       // case of redirect           
               url = "\'"+url+"\'"; // that's my url
               script = "\""+script+"\""; // that's the complete script
               $(this).attr("onClick","checkConnection("+url+","+script+")");
            }
        });
        // part of the function that checks the submit buttons (using ajaxForm plugin)
        var options = {
                    error: function() {                    
                        alert("Message Error");   
                    },
                    target: window.document,
                    replaceTarget: false,
                    timeout:   3000
                };
                $("form").ajaxForm(options);
    });

我希望这会有用。

答案 3 :(得分:0)

您正在尝试查看是否存在连接。 AFAIK实际检查服务器是否可访问的唯一方法是向该服务器发出请求。

设置一个相当短的时间(比如3s)的超时并发出请求。如果您收到超时错误,则表示没有连接,否则您最好发送表单。