【问题标题】:How do I POST XML data to a URL via JavaScript in an Adobe AIR app?如何在 Adob​​e AIR 应用程序中通过 JavaScript 将 XML 数据发布到 URL?
【发布时间】:2009-05-31 06:55:53
【问题描述】:

我正在编写一个应用程序,该应用程序从 URL 下载 XML 字符串并将 POSTs 下载到另一个 URL(设置为处理传入的“XML”字段)。我的第一部分是正确的 - 它下载 XML,我可以 alert() 它和所有这些,但我无法弄清楚如何将 POST 该数据发送到服务器。

function pull() {
    var myLoader = new air.URLLoader();
    var myRequest = new air.URLRequest('http://something/something.xml');
    myLoader.addEventListener(air.Event.COMPLETE, pulled);
    myLoader.load(myRequest);
}

function pulled(evt) {
    if (evt.target.bytesTotal>0) {
        // alerting shows the full string just fine
        alert(evt.target.data);

        var myLoader = new air.URLLoader();
        var myRequest = new air.URLRequest('http://someplace/push.php');
        myRequest.method = air.URLRequestMethod.POST;
        // myVars = new air.URLVariables("xml="+evt.target.data); // 
        // alert(evt.target.data.toUpperCase());
        myRequest.data = "xml="+evt.target.data; // myVars;
        myLoader.dataFormat = air.URLLoaderDataFormat.TEXT;
        myLoader.addEventListener(air.Event.COMPLETE, pushed);
        myLoader.load(myRequest);
    }
}

我将第二台服务器 PHP echo 设为 xml 变量的内容,但我无法获得 XML 字符串的确切内容。我正在用 myRequest.data 和/或 dataFormat 位做一些事情。

有人能解决这个问题吗?我知道这可能是一件简单的事情,但我现在已经无能为力了。

这是我的第一个 AIR 应用程序。

另一个相关的问题(或子问题)是……

alert(evt.target.data);               // shows an alert box with the XML
alert(typeof evt.target.data);        // shows String
alert(evt.target.data.toUpperCase()); // shows the xml converted to upper case
alert(encodeURI(evt.target.data));    // shows up blank.
alert(escape(evt.target.data));       // shows up blank.

为什么??

【问题讨论】:

  • 不会那么难吧??
  • 目标是Loader。 target.data 是您设置的数据。 -- 所以第一个警报显示了这个值。 typeof 显示'string',因为那是类型'toUpper' - 显示通过 toUpperCase 方法转换的字符串'encodeURI' 失败 - 因为 XML 格式不正确不确定转义 - 听起来像是失败了。 ..不知道为什么它是空白的。

标签: php javascript xml air


【解决方案1】:

错误似乎是您将参数分配给“数据”的方式...使用 URLVariables。

var params:URLVariables = new URLVariables();
params.[name of parameter] = [value];

--- 就像 params.xml = (YOUR XML) ... 来自您的示例:

// uses the dynamic object to add the 'xml' property to 'params' at runtime.
params.xml = evt.target.data

然后将你的 request.data 更改为 request.data = params;

-- URLVariables 是动态的 - 所以你可以添加我上面描述的属性。

举个基本的例子——比我这里的更完整:http://livedocs.adobe.com/flex/3/html/help.html?content=data_access_2.html

【讨论】:

  • 我实际上也没有在服务器的任何地方使用内容类型。我只是接受一个字符串并在 php.ini 中运行 simplexml_load_string 。忘记这是 xml 的事实。考虑到它只是文本,我需要进行哪些更改才能使其发布数据?
  • 关于数据的预期方式,我想模拟一个简单的<FORM method="POST"...>。 PHP 中的代码使用简单的$xml = $_POST['xml'] 来访问帖子数据。没有内容类型规范,没有标题,什么都没有。
  • 我记得尝试过类似于您刚才建议的方法,但我会再试一次。我应该保持myLoader.dataFormat = air.URLLoaderDataFormat.TEXT 不变还是应该将其删除或更改为其他内容?
  • 是的。将其保留为 URLLoaderDataFormat.TEXT。
  • 它正在工作!我删除了myloader.dataFormat... 行(因此它采用默认值)并且它现在正在发布。谢谢!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-04
相关资源
最近更新 更多