将变量从php传递到ajax - 很奇怪,没有任何作用

时间:2011-06-12 16:48:39

标签: php ajax

我很难将变量从PHP文件传递到.js文件

我使用的PHP文件中的代码是:

<script>

jQuery(document).ready(function(){
    var uid = <?php echo (intval($uid)); ?>;
    //var uid = <?php echo(intval($_SESSION['uid'])); ?>.val();

  });
</script>

在执行表单提交后,应将变量值传递到.js文件中以刷新页面上的某个div(而不是整个页面)。

这是.js文件,相应的代码从“//刷新监视器列表div”开始:

    $(function() {  

   $(".button").click(function() {  
     // validate and process form here  

     $('.error').hide();  
       var domain = $("input#domain").val();  
        if (domain == "") {  
       $("label#domain_error").show();  
       $("input#domain").focus();  
       return false;  
     }  
        var com_domain = $("input#com_domain").val();  
         if (com_domain == "") {  
       $("label#com_domain_error").show();  
       $("input#com_domain").focus();  
       return false;  
     }  
        var cemail = $("input#cemail").val();
        var port = $("select#port").val();
        var active = $("input#active").val();
        var uid = $("input#uid").val();
        var main = $("select#main").val();

     var dataString = 'cemail='+ cemail + '&domain=' + domain + '&com_domain=' + com_domain + '&active=' + active + '&main=' + main + '&port=' + port;  
     //alert (dataString);return false;  
     $.ajax({  
       type: "POST",  
       url: "user_add.php",  
       data: dataString,  
       success: function() {  
         $('#monitor_form').append("<div id='message'></div>"); 
         $('#monitor_form form')[0].reset();
         $('#message').html("<img id='checkmark' src='images/tick.png' /><b> Monitor sucessfully added!</b>")  
         .hide()  
         .fadeIn(500, function() {  
           $('#message').append("");  
         });
         setTimeout("$('#message').hide().remove();", 6000);

         var dataString2 = 'ajax=1&uid=' + uid;
         $.ajax({
             type: "GET",
             url: "monpanel.php",
             data: dataString2,
             success: function(html_data){
                $('#list_monitors').html(html_data);
            }
         });
         //document.onkeydown = showDown;
       }  
     });  
     return false; 
   });  
 }); 

function showDown(evt) {
    event = (evt)? evt : ((event)? event : null);
    if (evt) {
        if (event.keyCode == 8 && (event.srcElement.type!= "text" && event.srcElement.type!= "textarea" && event.srcElement.type!= "password")) {
            // When backspace is pressed but not in form element
            cancelKey(evt);
        }
        else if (event.keyCode == 116) {
            // When F5 is pressed
            cancelKey(evt);
        }
        else if (event.keyCode == 122) {
            // When F11 is pressed
            cancelKey(evt);
        }
        else if (event.ctrlKey && (event.keyCode == 78 || event.keyCode == 82)) {
            // When ctrl is pressed with R or N
            cancelKey(evt);
        }
        else if (event.altKey && event.keyCode==37 ) {
            // stop Alt left cursor
            return false;
        }
    }
} 

function cancelKey(evt) {
    if (evt.preventDefault) {
        evt.preventDefault();
        return false;
    }
    else {
        evt.keyCode = 0;
        evt.returnValue = false;
    }
}

/*function mycallbackfunc(v,m,f) {
    if (v == 'Cancel') {
        $.prompt('The action was ' + v + 'ed');
    }
    else {
        $.prompt('Monitor ' + v + 'd successfully');
    }
}*/

// ask for validation on monitor delete, pause, resume request
$(document).ready(function(){
   $(".error").hide();  
   alert("Stage 0! -> uid="+uid.toString());
   $("#mondelpau").validate({
        debug: false,
        rules: {
            act: "required",
            uid: "required",
            sid: "required"
        },
        /*messages: {
            name: "Please let us know who you are.",
            email: "A valid email will help us get in touch with you.",
        },*/
        submitHandler: function(form) {
            // do other stuff for a valid form
            //$.post('delpaures.php', $("#mondelpau").serialize(), 
            alert("Stage 1! -> uid="+uid.toString());
            $.ajax({
              async: false,
              type: "POST",
              url: "delpaures.php",
              data: $("#mondelpau").serialize(),
              success: function(data) {
                $('#monadiv').html(data);  
                 //$('#results').html(data);
                 //alert (data);return false;

                 // refresh the monitor list div

                //$('#list_monitors').load(dataString8);
                //var uid = $("input#uid").val();
                //var dataString8 = 'ajax=1&uid=' + $("input#uid").val();
                var dataString8 = 'ajax=1&uid=' + uid; // .val()
                //var dataString8 = 'ajax=1&uid=19';
                alert("Stage 2! -> uid="+uid.toString());
                $.ajax({
                  async: false,
                  type: "GET",
                  dataType: "html",
                  url: "monpanel.php",
                  data: dataString8,
                  success: function(html_data){
                    alert("Stage 3!");
                    $("#list_monitors").css("background-color","#FF0000");
                    $("#list_monitors").html(html_data);
                  }
                });
              }   
            });
        }
    });
});

毋庸置疑,我已尝试过所有内容,甚至将.js文件重命名为.php并使用.htaccess重定向到它们,但这也不起作用。

1 个答案:

答案 0 :(得分:0)

您无法访问js文件中的变量的原因是变量'uid'的定义范围与js文件不同。与此相同:

if(true) {
    var a = 1;
}

if(true) {
    // b will be undefined since 'a' was defined in another scope
    var b = a;
}

// so
jQuery(document).ready(function({
   // this is one scope
   var a = 1;
});

jQuery(document).ready(function({
   // this is another scope and b will be undefined
   var b = a;
});

您需要将uid存储在隐藏字段中,如:

<intput type="hidden" id="hidUid" value="<?php echo (intval($uid)); ?>"/>

然后在你的javascript范围内($(document).ready)

var uid = $("#hidUid").val();