2016-05-12 41 views
1

我在一個循環(使用JS)生成一系列變量,我分配他們.id.name根據當前的索引。在每個循環中,我使用jQuery.post()方法向服務器發送請求,但返回的響應只是一個空變量。 下面的代碼:jQuery.post()動態生成的數據到服務器返回空響應

的JavaScript

for (var index = 0; index < 5; index++) { 

    var myVar = document.createElement('p'); 

    myVar.id = 'myVarID' + index; 

    myVar.name = 'myVarName' + index; 


    //Send request to server 
    $(document).ready(function(){ 

     var data = {}; 

     var i = 'ind'; 
     var id = myVar.id; 
     var name = myVar.name; 

     data[id] = name; 
     data[i] = index; 

     $.post("script.php", data, function(data){ 

      console.log("Server response:", data); 

     }); 

    }); 

} 

PHP

<?php 

    $index = $_POST['ind']; 

    $myVar = $_POST['myVarID'.$index]; 

    echo $myVar; 

?> 

響應:Server response: ''

如果我不是在JS代碼中設置一個靜態指標,GE擬合擺脫循環的,因此,例如:

var index = 0; 

我得到預期的結果:Server response: myVarName0

這究竟是爲什麼?我該如何解決它?

回答

0

解決方案

這是工作的罰款去除:

$(document).ready() 

工作代碼

for (var index = 0; index < 5; index++) { 

    var myVar = document.createElement('p'); 

    myVar.id = 'myVarID' + index; 

    myVar.name = 'myVarName' + index; 


    //Send request to server 

    var data = {}; 

    var i = 'ind'; 
    var id = myVar.id; 
    var name = myVar.name; 

    data[id] = name; 
    data[i] = index; 

    $.post("script.php", data, function(data){ 

     console.log("Server response:", data); 

    }); 

} 
0

假設php文件是有序的。我用這個:

function doThing(url) { 
getRequest(
    url, 
    doMe, 
    null 
    ); 
    } 
    function doMe(responseText) { 
    var container = document.getElementById('hahaha'); 
    container.innerHTML = responseText; 
    } 
function getRequest(url, success, error) { 
var req = false; 
try{ 
    // most browsers 
    req = new XMLHttpRequest(); 
} catch (e){ 
    // IE 
    try{ 
     req = new ActiveXObject("Msxml2.XMLHTTP"); 
    } catch (e) { 
     // try an older version 
     try{ 
      req = new ActiveXObject("Microsoft.XMLHTTP"); 
     } catch (e){ 
      return false; 
     } 
    } 
} 
if (!req) return false; 
if (typeof success != 'function') success = function() {}; 
if (typeof error!= 'function') error = function() {}; 
req.onreadystatechange = function(){ 
    if(req .readyState == 4){ 
     return req.status === 200 ? 
      success(req.responseText) : error(req.status) 
     ; 
    } 
} 
var thing = "script.php?" + url; 
req.open("GET", thing, true); 
req.send(null); 
return req; 
    } 

然後使用它是這樣的:

doThing("myVarID="+myVar.id+"&i="+index); 

也,你將有你的PHP改變這樣的事情:

<?php 
    $index = $_GET['ind']; 

    $myVar = $_GET['myVarID'.$index]; 

    echo $myVar; 

?> 

顯然這個代碼需要進行編輯以適合您自己的需求

函數doMe是網頁響應時的操作,在該示例中我將id爲hahaha的元素更改爲響應文本。

這不會贏得任何獎品,但它會完成工作。

+0

謝謝你的努力,但是這是不是一個真正的回答我的問題。我試圖理解爲什麼我的代碼使用靜態變量而不是動態變量。 – leota

相關問題