jQuery.post()动态生成的数据到服务器返回空响应

时间:2016-05-12 16:54:32

标签: javascript php jquery post dynamic-programming

我在循环中生成一系列变量(使用JS),并且我根据当前索引为它们分配.id.name。在每个循环中,我使用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代码中设置一个静态索引,摆脱循环,例如:

var index = 0;

我得到了预期的结果:Server response: myVarName0

为什么会这样?我该如何解决?

2 个答案:

答案 0 :(得分: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 haha​​ha的元素更改为响应文本。

这不会赢得任何奖品,但它可以完成任务。

答案 1 :(得分:0)

<强>解决方案

它正常工作:

function getBySearchTerms(searchCreator) {
    return $.when.apply($, [
        this.getByConstituentId(5350),
        this.getByConstituentId(5349)
    ]);
}

工作代码

$(document).ready()