2012-03-13 111 views
3

发送XML创建jQuery的XML文档如下通过AJAX

var xmlDocument = $('<xml/>'); 
var foo = $('<foo/>'); 
var bar = $('<bar/>'); 

foo.append(bar); 
xmlDocument.append(foo); 

,并尝试将其转发给服务器。

$.ajax({ 
    url    : 'js/foobar.php', 
    type   : 'POST', 
    precessData  : false, 
    contentType  : 'text/xml', 
    data   : xmlDocument, 
    sucess   : function(data) { 
     alert('success'); 
    }, 
    error   : function() { 
     alert('failed to send ajax request'); 
    }, 
    complete  : function() { 
     alert('ajax request completed'); 
    } 
}); 

即使服务器回声一个“富”而已,我得到的alert('ajax request completed')而不是alert('success')。我究竟做错了什么?这是我创建xml文档的方式还是我将其转发到服务器的方式?

没有xml文档的ajax请求工作正常,我得到'foo'回来。

更新#1

改变precessData过程数据sucess成功我得到的failed to send ajax request对话框。

当我更改了AJAX方法的数据参数

$.ajax({ 
    ... 
    data : { 
     data: xmlDocument 
    }, 
    ... 
}); 

我也得到了failed to send ajax request对话框。

在服务器端的代码应该被罚款的原因,而是只

<?php 
echo 'foo'; 
?> 

更新#2

我转换我的字符串作为AndreasAL的答案

// Convert to string instead of DOM Elements 
xmlDocument = $("<wrap/>").append(xmlDocument).html(); 

// Url encode the string 
xmlDocument = encodeURIComponent(xmlDocument); 

,但我仍然获取相同的对话框(failed to send the ajax request)。所以我认为这个错误可能出现在我的xml文档中,并通过使用AndreasAL答案中的代码snipplet覆盖了我的xml文档。

xmlDocument = $('<xml/>'); 
foo = $('<foo/>').appendTo(xmlDocument); 
bar = $('<bar/>').appendTo(foo); 

仍然是相同的行为。

所以我再次检查我的xml文件,并将其打印在对话框中,它看起来很好。

我正在用尽错误的想法......

回答

2

最后,我决定转换XML文档并将其作为字符串发送到服务器。

$xmlString = $(xmlDocument).html(); 

由于这样的事实,我只需要存储的数据收到,它没有什么区别,如果我revieving它作为字符串或XML。

我只需要改变我的ajax请求,现在一切正常。

$.ajax({ 
    url    : 'js/foobar.php', 
    type   : 'POST', 
    data   : 'data=' + xmlString, 
    success   : function(data) { 
     alert(data); 
    }, 
    error   : function() { 
     alert('failed to send ajax request'); 
    }, 
    complete  : function() { 
     alert('ajax request completed'); 
    } 
}); 
0

使用本:

data : { xml: xmlDocument } 

邮政值需要一个键

+0

我试过了,但没有解决。作为对话框,我仍然只获得'ajax请求已完成'。 – 2012-03-13 11:53:05

4

编辑:

你有一个O型这不是precessDataprocessData

$.ajax({ 
    url    : 'js/foobar.php', 
    type   : 'POST', 
    precessData  : false, // change to processData 

和再次在sucess女巫喊是success


尝试:

var xmlDocument = $('<xml/>'), 
    foo = $('<foo/>').appendTo(xmlDocument), 
    bar = $('<bar/>').appendTo(foo); 

// Convert to string instead of DOM Elements 
xmlDocument = $("<wrap/>").append(xmlDocument).html(); 

// Url encode the string 
xmlDocument = encodeURIComponent(xmlDocument); 


$.ajax({ 
    url    : 'js/foobar.php', 
    type   : 'POST', 
    processData  : false, 
    contentType  : 'text/xml', 
    data   : xmlDocument, 
    success   : function(data) { 
     alert('success'); 
    }, 
    error   : function() { 
     alert('failed to send ajax request'); 
    }, 
    complete  : function() { 
     alert('ajax request completed'); 
    } 
}); 
+0

omg,我真的误会了它。但是现在我得到'未能发送ajax请求'对话框。 – 2012-03-13 11:56:57

+0

你有没有试过@Bas Tuijnman说? – andlrc 2012-03-13 12:10:58

+0

我也试过了,仍然是同一个对话框。 – 2012-03-13 12:31:12

1

我觉得你有

$.ajax({ 
    url    : 'js/foobar.php', 
    type   : 'POST', 
    precessData  : false, 
    contentType  : 'text/xml', 
    data   : xmlDocument, 
    success   : function(data) { 
     alert('success'); 
    }, 
    error   : function() { 
     alert('failed to send ajax request'); 
    }, 
    complete  : function() { 
     alert('ajax request completed'); 
    } 
}); 
3

您正在使用jQuery对象上的成功在您的代码中的错误通过整个proc ESS。

像这样编写XML,将字符串连接在一起。不使它们成为DOM对象。

var xmlDocument = '<xml/>'; 
xmlDocument += '<foo/>'; 
xmlDocument += '<bar/>'; 

然后张贴,这样

$.ajax({ 
    url    : 'js/foobar.php', 
    type   : 'POST', 
    precessData  : false, 
    contentType  : 'text/xml', 
    data   : { 
          data: xmlDocument //wrapped inside curly braces 
         }, 

    // Here is your spelling mistake 
    success   : function(data) { 
     alert('success'); 
    }, 
    error   : function() { 
     alert('failed to send ajax request'); 
    }, 
    complete  : function() { 
     alert('ajax request completed'); 
    } 
});