【问题标题】:How to update XML file using Ajax + Jquery?如何使用 Ajax + Jquery 更新 XML 文件?
【发布时间】:2015-02-04 11:09:28
【问题描述】:

我想使用 Ajax 和 jquery 更新 XML 文件。我是 ajax 新手,所以尝试同时使用 POST/PUT。

对于 PUT:我收到错误 405。即“找不到方法” 对于 POST:错误请求

vvmsUrl: 是xml文件的路径

我们的 get 工作正常,但 PUT/POST 却不行。

PUT 代码:

vvmsUrl: 是xml文件的路径

var XMLData= "<origin>ABCbfk</origin>";
       jQuery.ajax({
        type: "PUT",
        url: vvmsUrl,
        contentType: "application/xml",
        headers: { 'Prefer' : 'persistent-auth',
                   'Access-Control-Allow-Methods': 'PUT'},
        dataType: "xml",
        processData: false,
        crossDomain: true,
        data: XMLData,
        success:function(msg)
        {
           alert("hello"+msg);
        },
        error: function(msg){
        alert("Error"+msg);
        LOG(xhr.status);
        }
    });

我从 2 天开始就被困住了。我不明白这有什么问题。

【问题讨论】:

  • 问题终于解决了。问题在于“数据:XMLDATA”。它的 XML 格式不正确

标签: javascript jquery ajax xml xmlhttprequest


【解决方案1】:

你需要一个服务器端脚本来处理服务器上的任何修改,你不能只使用客户端 jQuery。该脚本还将检查谁有权写入文件,否则任何人都可以修改/更新您的 XML 文件,这是一个安全问题,可能是您不想要的。

请您包含所有代码吗?我的意思是 vvmUrl 是什么?你在使用一些网络服务吗?您的代码是否正在调用另一个域,为什么是crossDomain: true

编辑: 这应该适用于 jQuery 1.7.2+

var username = 'myUser';
var password = 'myPassword';

$.ajax
({
  type: "PUT",
  url: vvmsUrl,
  contentType: 'application/xml',
  async: false,
  crossDomain: true,
  username: username,
  password: password,
  data: xmlData,
  success: function (){
    alert('Works!'); 
  }
});

【讨论】:

  • 我收到一些“未找到方法”错误。所以我添加了 crossDomain: true。我的 GET 代码工作正常。但我无法进行 PUT/POST。我们使用 curl 完成了类似的代码,效果很好。
  • GET 可以正常工作,因为它没有对服务器上的文件进行任何更改。您的vvmsUrl 是文件的链接,文件在服务器上,对吗?因此,要更新该文件,您需要服务器端语言。您不能将数据 POST 到 XML 文件。
  • curl -X PUT -H "Accept: application/xml" \ -H "Content-Type: application/xml" -u ${arguser}:${argpass} \ --cacert ${ CERTFILE} -d@"${datafile}" ${url} \ >${file} 2>/dev/null
  • 看看修改后的答案。您需要在 ajax 调用中包含用户名和密码。
  • 我尝试执行上述代码,但弹出一个屏幕询问用户名和密码。但是,即使我输入用户名和密码,它也会让我再次询问相同的问题。
【解决方案2】:

你可以试试:上传任何文件

HTML 代码

<input type="file" id="uploadfile" name="uploadfile" />
<input type="button" value="upload" onclick="upload()" />

Javascript 代码

<script>
   var client = new XMLHttpRequest();

   function upload() 
   {
     var file = document.getElementById("uploadfile");

     /* Create a FormData instance */
     var formData = new FormData();
     /* Add the file */ 
     formData.append("upload", file.files[0]);

     client.open("post", "/upload", true);
     client.setRequestHeader("Content-Type", "multipart/form-data");
     client.send(formData);  /* Send to server */ 
     }

     /* Check the response status */  
     client.onreadystatechange = function() 
     {
      if (client.readyState == 4 && client.status == 200) 
       {
         alert(client.statusText);
       }
      }
</script>

【讨论】:

  • 我们正在尝试更新 XML 文件而不是 html 文件。
  • 所以你应该把“XML文件”改成“XML数据”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-31
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
相关资源
最近更新 更多