0

我正在尝试从我的服务器调用一个文件并返回一个 HTML 表单。我在这里问了一个问题开始,但现在我遇到了另一个问题。

文本框和提交按钮显示,但由于数据是 JSON 编码并通过 AJAX 返回到 DIV 我不太确定如何处理它。

现在这是结果。在我有“文本框和提交按钮”的地方,这些元素实际上就在那里。其他文本出现在它周围。

testing
{"formHTML":"
"textbox here" " submit button here"<\/form>"}

这是另一个调用我的服务器上的代码。这是显示的页面

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" ></script>
<?php
    echo "testing";
?>
<script>
$.ajax({
        type: 'GET',
        url: 'form_deliverer.php',
        data: "true",
        success: function(response) { // on success..
            $('#yourdiv').html(response); // update the DIV
        }
    })
</script>
<div id = "yourdiv">
//form is displayed here
</div>

这是被调用的页面,form_deliverer.php

<?
$o = new stdClass();
$o->formHTML = "<form method='post'><input type='textbox' name='text'/><input type='submit' name='submit_text'/></form>";
echo json_encode($o);
?>

因为AJAX会自动更新div,我该如何解码数据呢?我应该这样做吗?

作为参考,这将正确显示表单而没有额外的文本。但是,由于我将从另一台服务器调用并且必须处理相同的域问题,因此我将不得不使用 JSONP

<?
if(isset($_GET['true'])){
    echo "
    <form method='post'>
        <input type='textbox' name='text'/>
        <input type='submit' name='submit_text'/>
    </form>
    ";
}
?>
4

1 回答 1

0

您不需要解码数据,但您必须将响应视为对象。因为你json_encode()编辑了一个 stdClass,你的 ajax 调用基本上会得到这样的回报:

{"formHTML": "<form method='post'><input type='textbox' name='text'/><input type='submit' name='submit_text'/></form>"}

要访问字符串,您可以简单地编写

$("#yourdiv").html(response.formHTML);

但是,如果您只传递字符串,您可以简单地json_encode()使用字符串而不是创建一个对象然后对其进行编码。这样,您可以response直接在您的 javascript 中使用。

form_deliverer.php

<?
echo json_encode("<form method='post'><input type='textbox' name='text'/><input type='submit' name='submit_text'/></form>");
?>

javascript

$.ajax({
        type: 'GET',
        url: 'form_deliverer.php',
        data: "true",
        success: function(response) { // on success..
            $('#yourdiv').html(response); // update the DIV
        }
    })
于 2013-06-16T23:13:40.987 回答