【问题标题】:Actionscripts 3 POST JSON with Content HeaderActionscripts 3 带有内容标头的 POST JSON
【发布时间】:2018-02-24 11:56:13
【问题描述】:

我正在尝试将 JSON 发布到服务器,但代码不起作用。我找到了一些使用 Actionscripts 3 发布 JSON 的示例,但我需要在代码中定义内容类型。我在这里发布我的测试代码。

我在 Firefox RESTClient 中测试了 url+header+body 并且它们工作正常。 [![在此处输入图像描述][1]][1] 我确定 URL 是真实的并且在其他地方工作,但在这里我收到错误“错误打开 URL”

网址:“https://api.thinger.io/v2/users/***”

内容标题:“应用程序/json”

正文:{"in":true}

import flash.display.Sprite;
import flash.events.*;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLRequestHeader;
import flash.net.URLRequestMethod;
import flash.net.URLVariables;


var loader: URLLoader;

function ATN() {
    loader = new URLLoader();
    configureListeners(loader);

    var header: URLRequestHeader = new URLRequestHeader("Accept", "application/json");
    var request: URLRequest = new URLRequest("https://api.thinger.io/v2/users/***");
    request.data = new URLVariables("in:true");
    request.method = URLRequestMethod.POST;
    request.requestHeaders.push(header);
    try {
        loader.load(request);
    } catch (error: Error) {
        trace("Unable to load requested document.");
    }

}
function configureListeners(dispatcher: IEventDispatcher): void {
    dispatcher.addEventListener(Event.COMPLETE, completeHandler);
    dispatcher.addEventListener(Event.OPEN, openHandler);
    dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);
    dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
    dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
    dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
}

function completeHandler(event: Event): void {
    var loader: URLLoader = URLLoader(event.target);
    trace("completeHandler: " + loader.data);
}

function openHandler(event: Event): void {
    trace("openHandler: " + event);
}

function progressHandler(event: ProgressEvent): void {
    trace("progressHandler loaded:" + event.bytesLoaded + " total: " + event.bytesTotal);
}

function securityErrorHandler(event: SecurityErrorEvent): void {
    trace("securityErrorHandler: " + event);
}

function httpStatusHandler(event: HTTPStatusEvent): void {
    trace("httpStatusHandler: " + event);
}

function ioErrorHandler(event: IOErrorEvent): void {
    trace("ioErrorHandler: " + event);
}

ATN();

错误:

错误:错误 #2101:传递给 URLVariables.decode() 的字符串必须是 包含名称/值对的 URL 编码查询字符串。

在错误$/throwError()

在 flash.net::URLVariables/decode()

在 flash.net::URLVariables()

在 ATN_fla::MainTimeline/ATN()

在 ATN_fla::MainTimeline/frame1()

编辑:

function ATN() {
    loader = new URLLoader();
    configureListeners(loader);

    var header: URLRequestHeader = new URLRequestHeader("Accept", "application/json");
    var request: URLRequest = new URLRequest("https://api.thinger.io/v2/users/***");
    request.data = new URLVariables();
    var postData: Object = {"in": true};
    request.data = JSON.stringify(postData);
    request.method = URLRequestMethod.POST;
    request.requestHeaders.push(header);
    try {
        loader.load(request);
    } catch (error: Error) {
        trace("Unable to load requested document.");
    }

}

输出:

openHandler: [Event type="open" bubbles=false cancelable=false eventPhase=2] progressHandler 加载:44 总计:44

编辑 2:

function ATN() {
    loader = new URLLoader();
    configureListeners(loader);

    var header: URLRequestHeader = new URLRequestHeader("Accept", "application/json");
    var request: URLRequest = new URLRequest("https://api.thinger.io/v2/users/***");
    var postData: Object = {"in": true};
    request.data = JSON.stringify(postData);
    request.method = URLRequestMethod.POST;
    request.requestHeaders.push(header);
    try {
        loader.load(request);
    } catch (error: Error) {
        trace("Unable to load requested document.");
    }

}

输出 2:

openHandler: [Event type="open" bubbles=false cancelable=false eventPhase=2] progressHandler 加载:44 总计:44

打开网址“https://api.thinger.io/v2/users/***”时出错

httpStatusHandler: [HTTPStatusEvent type="httpStatus" bubbles=false 可取消=假 eventPhase=2 状态=400 重定向=假 responseURL=null]

ioErrorHandler: [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2032: Stream Error. URL: https://api.thinger.io/v2/users/***"]

【问题讨论】:

  • 那个Error #2032: Stream Error. URL: https://api.thinger.io/v2/users/***告诉你找不到URL(URL不存在)。 (2) api.thinger.io 应该是有效的 URL 吗?我看到一个“404 Not Found”,那么像v2users 这样的文件夹怎么会存在呢?
  • 网址工作正常。我在 Firefox RESTClient 中对其进行了测试。这里我删除了 URL 的一部分。
  • 我更改了 JASON 数据,之前的错误消失了。现在出现新的错误。

标签: actionscript-3 flash air animate-cc


【解决方案1】:

错误在于解析您提供给 URLVariables 构造函数的字符串。 URLVariables 仅用于构造名称/值对。如果要发送 JSON,只需直接设置 data 属性:

var postData:Object = { "in": true };
request.data = JSON.stringify( postData );

【讨论】:

  • 感谢您的回答,我更改了类似于 EDIT 部分的代码,但发生了错误。我的代码更改是真的吗?
  • 发生了什么错误?您没有提供有关您的问题的任何信息
  • 我的新代码是真的吗?您可以在 EDIT 部分下方看到新错误。
  • 我们现在将您设置两次请求数据,您应该删除第一个引用。这看起来不像是您代码中的跟踪输出的错误?
  • 我更新了这篇文章。请检查一下。这并不是真正的错误。它出现在输出窗口中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-01
  • 1970-01-01
  • 2019-12-13
  • 1970-01-01
  • 2017-04-27
  • 2017-08-31
相关资源
最近更新 更多