AJAX返回有效时,XML无效

时间:2017-01-02 15:32:11

标签: jquery ajax xml ajaxform

我使用jQuery Form Plugin和ajaxSubmit。但是当谈到返回值时,我得到了这个(前面有两个空行,但是它们在这里被截断了)。

<?xml version="1.0" encoding="UTF-8"?>
<elements>
 <success>
  <value>282</value>
 </success>
</elements>

ajaxSubmit调用有一个dataType:“xml”,返回的标题是正确的,但ajax停止时出现“Invalid XML”错误。我认为这两个空白行是不正确的,但即使修剪也不会删除它们。 XML生成看起来像这样:btw:

$output = new XMLWriter();
$output->openMemory();
$output->setIndent(true);
$output->startDocument('1.0', 'UTF-8');
$output->startElement("elements");

if (isset($theID)) {
  $output->startElement("success");
  $output->startElement('value');
  $output->text($theID);
  $output->endElement(); //value
  $output->endElement();
}

$output->endElement(); //elements
$output->endDocument();
$xml = $output->outputMemory(true);
header('Content-type: text/xml; charset=utf-8');
print trim($xml);

任何人都知道这里可能出现什么问题?

编辑: 这是Javascript,但由于它做得很好(即使有标题,我也没有首先显示它):

$('#formNewForm').ajaxSubmit({
        dataType: 'xml',
        beforeSubmit: function () {
          // something
        },
        error: function (jqXHR, textStatus, errorThrown) {
          // something
        },
        success: function (responseXML) {
          // something
        }
      });

2 个答案:

答案 0 :(得分:0)

我在评论中撒谎,我对你的javascript做了更新。这是我的工作代码:

<form id="formNewForm" action="ajax-test.php" method="post">
    <input type="text" name="name">
    <input name="submit" type="submit">
</form>
<script>
    // bind to the form's submit event
    $('#formNewForm').submit(function() {
        // inside event callbacks 'this' is the DOM element so we first
        // wrap it in a jQuery object and then invoke ajaxSubmit
        $(this).ajaxSubmit({
            dataType: 'xml',
            beforeSubmit: function () {
                // something
            },
            error: function (jqXHR, textStatus, errorThrown) {
                // something
            },
            success: function (responseXML) {
                alert(responseXML);
            }
        });

        // !!! Important !!!
        // always return false to prevent standard browser submit and page navigation
        return false;
    });
</script>

答案 1 :(得分:0)

解决方案非常简单,因为它与脚本或生成的xml完全无关。它是由一些包含的php文件中使用的php结束标记(“?&gt;”)引起的,当一个新行在它之后。