2011-06-12 44 views
0

我有從PHP文件傳遞變量到.js文件從PHP阿賈克斯傳遞變量 - 不可思議,實在不行

在我使用的PHP文件中的代碼很大的困難是這樣的:

<script> 

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

    }); 
</script> 

變量值應該傳遞到.js文件中,以便在執行表單提交後刷新頁面上的某個div(而不是整個頁面)。

這是.js文件和相應的代碼開始於「//刷新監視器列表格」:

$(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重定向到他們,但這也行不通。

+0

我的天啊,代碼全部弄壞了。這裏的插入代碼的能力是非常殘酷的,只是破壞了代碼並留下了標籤......我該如何解決這個問題? – Joe 2011-06-12 16:52:23

+0

謝謝你糾正我的代碼! – Joe 2011-06-12 16:56:43

+1

所以你試圖從js文件中呈現的頁面訪問一個值?你爲什麼不把價值存儲在一個隱藏的領域,並從你的js中訪問它? – 2011-06-12 16:59:09

回答

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的範圍內($(文件)。就緒)

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

如果我理解正確,我需要用隱藏字段替換上面引用的全部代碼(在php文件中的javascript調用),然後將var uid放在.js文件中,或者將此var uid也放入php文件? – Joe 2011-06-12 18:23:29

+0

噢,好吧,我想我知道了,問題在於document.ready被定義爲一個函數 - 所以uid沒有被傳遞進去。發現得好。非常感謝。 – Joe 2011-06-12 18:29:15

+0

那麼這是回答? – 2011-06-12 18:41:25