【问题标题】:How do I pass .xml from jQuery to PHP?如何将 .xml 从 jQuery 传递到 PHP?
【发布时间】:2016-12-06 13:59:44
【问题描述】:

我正在使用jQuery.ajax() 在我的网站上提交表单。我收到一个 .xml 响应,我想将它发送到一个 .php 文件。我尝试过使用另一个 jQuery.ajax() 函数:

<script type="text/javascript">
  $(document).ready(function() {
    $('#form').submit(function(e) {
      e.preventDefault();

      $.ajax({
        type: 'POST',
        url: 'myURL',
        data: $('#form').serialize(),
        success: function(xml)
        {
          $.ajax({
            type: 'POST',
            url: 'saveData.php',
            data: {
              xml: $(xml),
            },
            success: function(data) {
              $('#output').html(data);
            }
          });
        }
      });
    });
  })
</script>

但我遇到了"Illegal invocation" 错误。所以我在我的内部 AJAX 函数中添加了processData: false。现在我得到另一个错误:Undefined index: xml in... 这是我的 PHP 代码:

<?php
  $xml = $_POST['xml'];
?>

如何处理这个问题?

【问题讨论】:

  • 你需要解析XML的内容并将其转换为jquery/php可以接受的对象
  • 为什么需要发送一个jquery对象:xml: $(xml),?尝试剥离 jquery 对象表示法。 xml: xml,.
  • @Jai 试过了,还是出现这个错误。
  • $(xml) 返回空值,因此在 xml: $(xml) 中,您在变量 $_POST['xml'] 中发送空值。
  • @AntonioAlexandreAlonsodeSi 你怎么知道它是否返回 null?

标签: php jquery ajax xml


【解决方案1】:

您可以尝试在第一个$.ajax 调用中指定您将使用dataType 接收XML:

$.ajax({
    type: 'POST',
    url: 'myURL',
    dataType: 'xml,
    data: $('#form').serialize(),
    success: function(xml) (...)

但我有一个问题。 为什么将 ajax 用于另一个 ajax 调用? 如果两者都是在同一个服务器上制作的,它似乎不合法。

【讨论】:

  • 不幸的是它没有用。 “myURL”是一个外部服务器。
  • 好的,如果它是外部服务器。您是否尝试将我的答案与@Jai 关于在第二个 $.ajax 中使用 xml : xml 而不是 xml : $(xml) 的评论混为一谈?
  • 是的,我做到了,但也没有用。
  • 您说您使用的是外部服务器。如果你使用两台不同的服务器,也许你将不得不处理 XSS。 Stackoverflow 中有一个答案建议使用 JSONP 来克服跨站脚本的问题:stackoverflow.com/questions/3506208/jquery-ajax-cross-domain
【解决方案2】:

这可以帮助您进行调试。也许如果你改变 xml: $(xml) 为 xml: $(xml).val() 你会得到你想要的。

取消alert($(xml).val()) 行的注释,你会看到$(xml) 的内容是什么。

<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>

<script type="text/javascript">
  $(document).ready(function() 
  {

    $('#form').submit(function(e) 
    {
          e.preventDefault();

         // alert($(xml).val()); 


          $.ajax({
                type: 'POST',
                url: 'testpost.php',
                data: {
                  xml: $("#xml").val(),
                },
                success: function(data) {
                  $('#output').html(data);
                }
          });

    });

  })
</script>
</head>
<body>

<form id="form" method="POST">
<textarea name="xml" id="xml"><myxml>this is a test</myxml></textarea>
<input type="submit" value="Send">
</form>

<div id="output">Nothing executed till now</div>

</body>
</html>

testpost.php

<?php

var_dump($_POST["xml"]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-03
    • 1970-01-01
    • 2012-04-28
    • 1970-01-01
    相关资源
    最近更新 更多