如何使用JSON作为请求主体从Flash(AS2)发布JSON数据

如何使用JSON作为请求主体从Flash(AS2)发布JSON数据,flash,json,actionscript-2,Flash,Json,Actionscript 2,全部, 我正在开发一个需要将JSON数据发布到web服务的FlashAS2应用程序 在以前的项目中,我成功地使用了LoadVars.send()或LoadVars.sendAndLoad()来管理: var send_lv:LoadVars = new LoadVars(); send_lv.data = JSON.stringify({some json object}); var response_lv:LoadVars = new LoadVars(); response_lv.onDa

全部,

我正在开发一个需要将JSON数据发布到web服务的FlashAS2应用程序

在以前的项目中,我成功地使用了LoadVars.send()或LoadVars.sendAndLoad()来管理:

var send_lv:LoadVars = new LoadVars();
send_lv.data = JSON.stringify({some json object});

var response_lv:LoadVars = new LoadVars();
response_lv.onData = function(rawdata) {
    var o:Object = JSON.parse(rawdata);
    ....
}

send_lv.sendAndLoad("somepage.php", response_lv, "POST");
在somepage.php中,我可以使用$\u POST['data']获取JSON数据

然而,在这个项目中,web服务的开发人员要求JSON内容成为请求的主体(即,不是名称/值对)。LoadVars可以这样做吗

如果没有,是否有其他方法可以使用AS2实现这一点


非常感谢

对不起。。。这是本月我第二次回答我自己的问题。然而,这是迄今为止我得到的最好的

长话短说。。。使用LoadVars(),可以将一系列名称/值对发布到URL。但是我正在向其发送数据的特定服务的开发人员明确要求,不使用名称/值对,而是将数据作为文章的主体

我不知道如何使用LoadVars()实现这一点

然而,看起来我可以用XML.sendAndLoad()实现这一点,即使我发送的数据实际上不是XML(在我的例子中,它是JSON)

例如,如果JSON存储在名为JSON的对象中:

dataAsString = JSON.stringify(json);
var send_xml:XML = new XML(dataAsString);
var response_xml:XML = new XML()
response_xml.onData = function(rawResponseData) {
    trace (rawResponseData);
}
send_xml.sendAndLoad([url], response_xml, "POST");
如果[url]是“somepage.php”,那么在php页面中,您可以获得如下数据:

<?php
    $data = file_get_contents("php://input");
    // data will contain now contain the json object as a string
?>
var lj:LoadJson = new LoadJson();
lj.json = {"key":"value"};
lj.onLoad = function(success:Boolean):Void { trace(success); };
lj.addRequestHeader(["X-HTTP-Method-Override", "PUT"]);
lj.sendAndLoad("http://yoururl.com", lj, "POST");

我无法想象这是唯一(或最好)的方法。例如,send_xml不是有效的xml对象(因为json字符串显然不是有效的xml)


不过,这允许我在不使用名称/值对的情况下将JSON字符串发布到服务。

对不起。。。这是本月我第二次回答我自己的问题。然而,这是迄今为止我得到的最好的

长话短说。。。使用LoadVars(),可以将一系列名称/值对发布到URL。但是我正在向其发送数据的特定服务的开发人员明确要求,不使用名称/值对,而是将数据作为文章的主体

我不知道如何使用LoadVars()实现这一点

然而,看起来我可以用XML.sendAndLoad()实现这一点,即使我发送的数据实际上不是XML(在我的例子中,它是JSON)

例如,如果JSON存储在名为JSON的对象中:

dataAsString = JSON.stringify(json);
var send_xml:XML = new XML(dataAsString);
var response_xml:XML = new XML()
response_xml.onData = function(rawResponseData) {
    trace (rawResponseData);
}
send_xml.sendAndLoad([url], response_xml, "POST");
如果[url]是“somepage.php”,那么在php页面中,您可以获得如下数据:

<?php
    $data = file_get_contents("php://input");
    // data will contain now contain the json object as a string
?>
var lj:LoadJson = new LoadJson();
lj.json = {"key":"value"};
lj.onLoad = function(success:Boolean):Void { trace(success); };
lj.addRequestHeader(["X-HTTP-Method-Override", "PUT"]);
lj.sendAndLoad("http://yoururl.com", lj, "POST");

我无法想象这是唯一(或最好)的方法。例如,send_xml不是有效的xml对象(因为json字符串显然不是有效的xml)


尽管如此,这使我能够在不使用名称/值对的情况下将JSON字符串发布到服务。

我知道这是一个老话题,但我找到的最好的解决方案(通过X-HTTP-Method-Override)也适用于PUT,就是从LoadVars派生一个新类,如jadent所述:

这将允许您执行以下操作:

<?php
    $data = file_get_contents("php://input");
    // data will contain now contain the json object as a string
?>
var lj:LoadJson = new LoadJson();
lj.json = {"key":"value"};
lj.onLoad = function(success:Boolean):Void { trace(success); };
lj.addRequestHeader(["X-HTTP-Method-Override", "PUT"]);
lj.sendAndLoad("http://yoururl.com", lj, "POST");

我花了3天时间才发现-。-

我知道这是一个老话题,但我找到的最好的解决方案,也适用于PUT(通过X-HTTP-Method-Override),就是从LoadVars派生一个新类,如jadent所述:

这将允许您执行以下操作:

<?php
    $data = file_get_contents("php://input");
    // data will contain now contain the json object as a string
?>
var lj:LoadJson = new LoadJson();
lj.json = {"key":"value"};
lj.onLoad = function(success:Boolean):Void { trace(success); };
lj.addRequestHeader(["X-HTTP-Method-Override", "PUT"]);
lj.sendAndLoad("http://yoururl.com", lj, "POST");

我花了3天时间才发现-。-

弗洛里安·闪电的答案是正确的(谢谢你的发帖)

如果您想使用建议的
LoadJson
类替代
LoadVars
项目范围(它可能会处理
GET
请求)
toString()
如果未检测到json负载,则应返回其super

class LoadJson extends LoadVars {

    public var json:String;

    public function toString() {
        if (json != undefined) {
            return json;
        }
        return super.toString();
    }

}

Florian Lightning的回答是正确的(感谢您的发帖)

如果您想使用建议的
LoadJson
类替代
LoadVars
项目范围(它可能会处理
GET
请求)
toString()
如果未检测到json负载,则应返回其super

class LoadJson extends LoadVars {

    public var json:String;

    public function toString() {
        if (json != undefined) {
            return json;
        }
        return super.toString();
    }

}

您是否使用adobe flash professional编译了您的项目?它冻结了使用mtasc编译的swf,但是它似乎是您使用adobe flash professional编译项目的唯一选项?它冻结了使用mtasc编译的swf,但是它似乎是唯一的选项