如何使用ajax将XML数据发布到服务器?

时间:2014-01-19 19:34:20

标签: jquery ajax

这正是我想传递给服务器的数据:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"
xmlns:gx="http://www.google.com/kml/ext/2.2"
xmlns:kml="http://www.opengis.net/kml/2.2"
xmlns:atom="http://www.w3.org/2005/Atom">
<Document>
<Placemark>
  <name>model1</name>
  <Model id="model_1">
    <Location>
      <longitude>-5.986926473546048</longitude>
      <latitude>37.37725475811571</latitude>
      <altitude>0</altitude>
    </Location>
    <Orientation>
      <heading>0</heading>
      <tilt>0</tilt>
      <roll>0</roll>
    </Orientation>
    <Scale>
      <x>1</x>
      <y>1</y>
      <z>1</z>
    </Scale>
    <Link>
      <href>http://www.ihs.org/objects/streetlight.dae</href>
    </Link>
    <ResourceMap>
      <Alias>
        <targetHref>http://www.ihs.org/objects/streetlight/texture0.jpg</targetHref>
        <sourceHref>streetlight/texture0.jpg</sourceHref>
      </Alias>
      <Alias>
        <targetHref>http://www.ihs.org/objects/streetlight/texture1.jpg</targetHref>
        <sourceHref>streetlight/texture1.jpg</sourceHref>
      </Alias>
    </ResourceMap>
  </Model>
</Placemark>
<Placemark>
  <name>model2</name>
  <Model id="model_2">
    <Location>
      <longitude>-5.986969267031843</longitude>
      <latitude>37.37727640316665</latitude>
      <altitude>0</altitude>
    </Location>
    <Orientation>
      <heading>0</heading>
      <tilt>0</tilt>
      <roll>0</roll>
    </Orientation>
    <Scale>
      <x>1</x>
      <y>1</y>
      <z>1</z>
    </Scale>
    <Link>
      <href>http://www.ihs.org/objects/streetlight.dae</href>
    </Link>
    <ResourceMap>
      <Alias>
        <targetHref>http://www.ihs.org/objects/streetlight/texture0.jpg</targetHref>
        <sourceHref>streetlight/texture0.jpg</sourceHref>
      </Alias>
      <Alias>
        <targetHref>http://www.ihs.org/objects/streetlight/texture1.jpg</targetHref>
        <sourceHref>streetlight/texture1.jpg</sourceHref>
      </Alias>
    </ResourceMap>
  </Model>
</Placemark>
</Document>
</kml>

我通过ajax帖子发送这个,因此,

$.ajax({
                    type: "POST",
                    url:"/php/sendEdition.php?kml="+output,
                    async: true,
                    success: function(datos){
                        //datakml = eval(datos);
                        document.getElementById('dataOut').innerHTML = datos;                          

            },
                   error: function (obj, error, objError){

                        alert("error");
                    }
                });

这不起作用。没有数据发送到服务器。我想也许你不能只通过ajax传递HTML标签;是对的吗?我没有使用表格,但没关系,因为我已经掌握了所有信息。

4 个答案:

答案 0 :(得分:1)

这是你的问题:

type: "POST",
url:"/php/sendEdition.php?kml="+output+",

首先,在逗号之前的结尾处的引号是语法错误。删除它。

其次,您将数据附加到URL,这将生成一个类似/php/sendEdition.php?kml=<?xml version="1.0"的URL ....您可以立即在此处查看问题,在该问号和&符号(和其他值)中XML数据应该是URL转义的,但不是。

您可以使用encodeURIComponent()解决此问题,因此:

type: "POST",
url: "/php/sendEdition.php?kml=" + encodeURIComponent(output),

现在您的XML将被正确转义。

但是,为什么要在URL中发送XML呢?这是一个POST请求,带有POST正文。大数据最好以这种方式发送。

type: "POST",
url: "/php/sendEdition.php",
data: {"kml": output},

答案 1 :(得分:0)

您正试图将指向文件的指针存储到数据库中,这是不可能的。相反,您应该将文件的内容存储到数据库中。

mysql_query("INSERT INTO places_edited (id_user, user_name, user_pic_square, id_place, place_name, place_pic, latitude, longitude, kml, place_type, description)
VALUES ('$id_user', '$user_name', '$user_pic_square', '$id_place', '$place_name', '$place_pic', '$latitude', '$longitude', '$kml', '$place_type', '$description')");

您也可以创建一个临时文件并存储文件名,但第一个选项更容易。

答案 2 :(得分:0)

您在ajax调用中使用type: "POST",然后尝试使用PHP代码中的GET访问它。

将您的PHP $_GET超全局更改为$_POST,如下所示: -

$id_user=$_POST['id_user'];
$user_name=$_POST['user_name'];
$user_pic_square=$_POST['user_pic_square'];
$id_place=$_POST['id_place'];
$place_name=$_POST['place_name'];
$place_pic=$_POST['place_pic'];
$latitude=$_POST['latitude'];
$longitude=$_POST['longitude'];
$kml=$_POST['kml'];               //THIS ONE IS THE BLOB FIELD
$place_type=$_POST['place_type'];
$description=$_POST['description'];

希望这有帮助。

另外,请查看PHP文档 - 不再使用mysql_函数,改为使用mysqli_或PDO。这不是你的问题,只是一个建议。

W3Schools为PHP和MySQL教程提供了一个很好的起点。

答案 3 :(得分:0)

$.ajax({
                        type     : "POST",
                        url      : "/php/uploadkml.php?",
                        data     : { "kml": encodeURIComponent(output) },
                        //dataType : "xml",
                        success  : function(datos){
                            document.getElementById('dataOut').innerHTML = datos;
                        alert("Success");
                        },
                        error    : function(datos) {
                            if (datos){
                            datakml = eval(datos);
                            document.getElementById('dataOut').innerHTML = datakml;
                            }
                        alert("Failed");
                        }
                    });

在php上解码它。

还有很多其他选择,但我不明白为什么这个选项对我来说唯一...