1

我想不出更好的标题,但这里是解释:

我正在发出一个看起来像这样的 ajax 请求:

...
xmlhttp.send("data1=" + $data);
...

document.getElementById("data1display").innerHTML= xmlhttp.responseText;
...

现在页面已经开发,我想将另一个变量 data2 发送到同一个 php 页面进行处理。

我意识到我可以向 xmlhttp.send 添加数据"data1=" + $data + "data2=" + $data2

但!如何拆分响应以更新两个单独的元素?(数据1显示和数据2显示)。

构建响应的代码:

if ( isset( $_POST["data1"] ) ) 

 die($object->function()); //returns html to fill the specified element.
4

2 回答 2

4

如果您的 php 处理页面发送回 JSON 而不是 html,您可能会期望以下内容:

{
    "data1display": "<div>whatever</div>",
    "data2display": "<div>something</div>"
}

然后在您的 js 成功回调中,您可以执行以下操作:

var targetIdArray = ["data1display", "data2display"];
var responseJSON = JSON.parse(xmlhttp.responseText);
for (var i = 0; i < targetIdArray.length; i++) {
    document.getElementById(targetIdArray[i]).innerHTML= responseJSON[targetIdArray[i]];
}

如果您想在响应中坚持使用 html,您可以为响应的每个部分添加一个类或 ID,并使用常规的旧 jQuery 选择器从响应中获取正确的节点。

最终,您可能想要更改您的前端框架,因此最好将您想要呈现的数据传回并让客户端呈现它。这意味着根本不将 html 传递回客户端,而是使用一些模板解决方案,例如handlebars

{
    "data1display": "whatever",
    "data2display": "something"
}

然后,您可以制作几个小模板,例如:

<div>{{ content }}</div>

并将它们呈现在客户端中。

于 2013-06-13T21:39:26.297 回答
0

你能不能不输入 if 语句并说如果设置了这个请求然后做

document.getElementById("data1display").innerHTML=xmlhttp.responseText;

否则这样做

document.getElementById("data2").innerHTML= xmlhttp.responseText;

只需将 if 语句添加到您的 ajax

于 2013-06-13T21:45:31.453 回答