2016-02-04 28 views
0

我有一個執行計算的java-script函數。我想在我的php代碼中使用該計算的答案。執行java腳本並在我的php查詢中使用結果

document.write(Fixed((PoissonTerm(X, Y)),8,4)) 

兩個值X和Y來自變量我的PHP代碼,以便

<?php 
$valueofx; 
$valueofy; 
?> 

在理想世界中,我想看起來像這樣

<?php 
$thejavascriptvalue = document.write(Fixed((PoissonTerm($valueofx, $valueofy)),8,4)) 
?> 

我知道這沒有做,我有5個不同的價值,我需要拉和使用。無論如何我可以解決它嗎?我不介意刷新頁面或從其他頁面抓取它,只要我可以在我的PHP代碼中使用5個值。

我需要重定向像

document.write(Fixed((PoissonTerm(0.1, 0)),8,4)) 
    document.write(Fixed((PoissonTerm(8, 2)),8,4)) 
    document.write(Fixed((PoissonTerm(6, 3)),8,4)) 

如果下面的JavaScript

function Fixed(s, wid, dec) { 
    // many combinations of possibilities 

    // maybe prepare for upcoming truncate 
    var z = 1 
    if (dec > 0) { 
     z /= Math.pow(10, dec); 
     if (s < -z) s -= 0.5 * z; 
     else 
     if (s > z) s += 0.5 * z; 
     else 
      s = 0; 
     } 

    // assure a string 
    s = "" + s; 

    // chop neg, if any 
    var neg = 0; 
    if (s.charAt(0) == "-") { 
     neg = 2; 
     s = s.substring(1, s.length); 
     } 

    // chop exponent, if any 
    var exp = ""; 
    var e = s.lastIndexOf("E"); 
    if (e < 0) e = s.lastIndexOf("e"); 
    if (e > -1) { 
     exp = s.substring(e, s.length); 
     s = s.substring(0, e); 
     } 

    // if dec > 0 assure "."; dp == index of "." 
    var dp = s.indexOf(".", 0); 
    if (dp == -1) { 
     dp = s.length; 
     if (dec > 0) { 
     s += "."; 
     dp = s.length - 1; 
     } 
     } 

    // assure leading digit 
    if (dp == 0) { 
     s = '0' + s; 
     dp = 1; 
     } 

    // not enough dec pl? add 0's 
    while ((dec > 0) && ((s.length - dp - 1) < dec)) 
     s += "0"; 

    // too many dec pl? take a substring 
    var places = s.length - dp - 1; 
    if (places > dec) 
     if (dec == 0) 
     s = s.substring(0, dp); 
     else 
     s = s.substring(0, dp + dec + 1); 

    // recover exponent, if any 
    s += exp; 

    // recover neg, if any 
    if (neg > 0) 
     s = "-" + s; 

    // if not enough width, add spaces IN FRONT 
    // too many places? tough! 
    while (s.length < wid) 
     s = " " + s; 

    return s 
    } 

function Prb(x) { 
    if (x < 0) x = 0; 
    else 
     if (x > 1) x = 1; 
    return x; 
    } 

function PosV(x) { 
    if (x < 0) x = -x; 
    return x; 
    } 


// FACTORIALS 

function Fact(x) { 
    // x factorial 
    var t=1; 
    while (x > 1) 
     t *= x--; 
    return t; 
    } 

function LnFact(x) { 
    // ln(x!) by Stirling's formula 
    // see Knuth I: 111 
    if (x <= 1) x = 1; 

    if (x < 12) 
     return Math.log(Fact(Math.round(x))); 
    else { 
     var invx = 1/x; 
     var invx2 = invx * invx; 
     var invx3 = invx2 * invx; 
     var invx5 = invx3 * invx2; 
     var invx7 = invx5 * invx2; 

     var sum = ((x + 0.5) * Math.log(x)) - x; 
     sum += Math.log(2*Math.PI)/2; 
     sum += (invx/12) - (invx3/360); 
     sum += (invx5/1260) - (invx7/1680); 

     return sum; 
     } 
    } 

// POISSON 

function PoissonPD(u, k) { 
    // Peizer & Pratt 1968, JASA 63: 1416-1456 

    var s = k + (1/2); 

    var d1 = k + (2/3) - u; 
    var d2 = d1 + 0.02/(k+1); 

    var z = (1 + g(s/u))/u; 
    z = d2 * Math.sqrt(z); 
    z = NormalP(z); 

    return z; 
    } 

function PoissonTerm(u, k) { 
    // by logs 
    return Math.exp((k * Math.log(u)) - u - LnFact(k)); 
    } 

function PoissonP(u, k) { 
    // term-by-term summation 
    if (k >= 20) return PoissonPD(u, k); 
    else { 
     var sum = 0.0, j = 0; 
     while (j <= k) 
     sum += PoissonTerm(u, j++); 
     if (sum > 1) sum = 1; 
     return sum; 
     } 
    } 

function DoPoi(aform) { 
    var u = PosV(parseFloat(aform.u.value)); 
    aform.u.value = Fixed(u,10,4); 
    var k = PosV(parseInt(aform.k.value)); 
    aform.k.value = Fixed(k,8,0); 
    aform.tnk.value = Fixed(PoissonTerm(u, k),8,4); 
    var t = PoissonP(u, k); 
    aform.puk.value = Fixed(t,8,4); 
    aform.quk.value = Fixed(1-t,8,4); 
    } 
+1

您可以使用AJAX調用將這些值發送到PHP頁面,讓頁面處理並執行任何操作,並且JavaScript將攔截結果。 – durbnpoisn

+1

您也可以通過生成一個新的URL並將這些變量作爲$ _GET參數發送,從而將值發送給PHP。或者,您可以使用這些值創建表單並將其作爲$ _POST提交給PHP。 – durbnpoisn

+0

或者你也可以重寫php中的等價函數,如果他們實際上不依賴於客戶端的交互 – Steve

回答

1

這是非常通用之前運行的JavaScript的10倍。你將不得不根據你的需要進行修改。但是,這會給你的基本思路:

<form name="thisform" action="phpPage.php" method="POST"> 
X: <input type="text" name="val_x" id="val_x" value="40" /><br /> 
Y: <input type="text" name="val_y" id="val_y" value="60" /><br /> 
<input type="button" onclick="sendForm();" value="send form"/> 
</form> 

的JavaScript:

function sendForm(){ 
    //Choose one of these methods:   

    //This will generate a string that you can use as a location. 
    //use $_GET in PHP to retrieve the values 
    var valofX = document.getElementById("val_x").value; 
    var valofy = document.getElementById("val_y").value; 
    generateURL = 'phpPage.php?val_x=' + valofX; 
    generateURL += '&val_y=' + valofy; 
    document.location = generateURL; 


    //This will submit the form. 
    //use $_POST in PHP to retrieve the values 
    document.getElementById("thisform").submit(); 
} 

一旦提交表單,或位置信息發送,你需要搶在PHP中值:

$val_x = $_POST['val_x']; 
$val_y = $_POST['val_y']; 

//OR 

$val_x = $_GET['val_x']; 
$val_y = $_GET['val_y']; 

您將使用$ _GET或$ _POST,具體取決於值的發送方式。

+0

sendForm()是JavaScript,而不是PHP,是否有執行sendForm()與PHP腳本,而不是一個onclick函數,因爲我想自動化腳本 –

+0

。所以不行。但是,JavaScript可以隨時觸發它。這只是一個函數調用。我將它附加到提交按鈕。但是,你可以隨心所欲地調用它。 – durbnpoisn

+0

最後,這是將您的JS變量傳遞給PHP頁面進行處理的最簡單方法,不管它們是否生成。 – durbnpoisn

相關問題