as3与navigateToURL post方法有关

时间:2012-04-17 06:50:25

标签: actionscript-3 http-post

我有一个包含flash对象的页面。在特定操作上,页面需要重定向到其他页面并发送一些数据(变量)。我正在使用urlvariables和navigateToURL这样做。页面重定向并发送数据(变量)。

但问题是数据(变量)是在查询字符串中发送的(我的意思是“http://dummy.php/?first_name=xyz”)。我使用post方法发送数据(变量)。我不能像查询字符串那样发送数据(变量)。

如何解决这个问题?

PS:我在下面写了所有代码......

var request:URLRequest = new URLRequest("http://dummy.php");
var vars:URLVariables = new URLVariables();
vars.first_name = 'xyz';
request.data = vars;
request.method = URLRequestMethod.POST;
navigateToURL(request, "_blank");

3 个答案:

答案 0 :(得分:2)

我刚刚做了这个简单的测试,向Twitter的搜索API发送了一个POST请求(似乎接受了GET和POST请求)。正如您在附带的屏幕截图中看到的那样,浏览器的URL字段没有显示任何变量,而Httpfox(您可以使用Firebug,Chrome的开发人员工具等执行相同操作......)显示POST按预期传递的变量。您发布的示例代码是真正导致您麻烦的代码吗?这是我使用的:

    // Create the POST request
var request:URLRequest = new URLRequest("http://search.twitter.com/search.json");
request.method = URLRequestMethod.POST;

// Create the variables object
var vars:URLVariables = new URLVariables();
vars.q = 'love';
vars.rpp = '5';
vars.include_entities = 'true';

// Attach variables to request object
request.data = vars;

// Open new window using the POST request
navigateToURL(request, "_blank");

Httpfox screenshot showing POST vars being passed as expected

答案 1 :(得分:1)

您是否遵守所施加的各种规则和限制?

  

发送POST请求时,contentType和data属性的值必须正确对应。 contentType属性的值指示服务器如何解释数据属性的值。

     

如果data属性的值是URLVariables对象,则contentType的值必须是application / x-www-form-urlencoded。   如果data属性的值是任何其他类型,则contentType的值应指示将要发送的POST数据的类型(数据属性的值中包含的二进制或字符串数​​据)。   对于FileReference.upload(),请求的Content-Type自动设置为multipart / form-data,并忽略contentType属性的值。

     

在Flash Player 10及更高版本中,如果您使用包含上传的多部分内容类型(例如“multipart / form-data”)(由“content-disposition”标题中的“filename”参数指示) POST主体),POST操作受上传应用的安全规则的约束:   必须执行POST操作以响应用户启动的操作,例如鼠标单击或按键。   如果POST操作是跨域的(POST目标与发送POST请求的SWF文件不在同一服务器上),则目标服务器必须提供允许跨域访问的URL策略文件。   此外,对于任何multipart Content-Type,语法必须有效(根据RFC2046标准)。如果语法似乎无效,则POST操作受适用于上载的安全规则的约束。

也许有些东西导致它默认回到GET请求。

答案 2 :(得分:1)

当我执行以下操作时,我发生了此错误:

var vars:URLVariables = new URLVariables();
vars.q = 'http://example.com/var1=7&var2=9';

get样式变量显然不会自动进行URL编码,导致Flash从设置的POST方法恢复为GET方法。我在离开时使用了URL编码和问题。

vars.q = encodeURIComponent('http://example.com/var1=7&var2=9');