http_post_string

在计算中,当客户端需要将数据作为检索请求的一部分发送到服务器时,例如上传文件或提交完成的表单时,使用post请求,GameMaker中的此函数也是如此。与http_get()请求方法不同的是,http_post_string()还包括一个发送到服务器的字符串,该字符串可能会导致创建新资源或更新现有资源,或者两者都有。需要注意的是,在使用此函数时,HTTP请求参数(当您在网页上提交表单时,有时会“附加”到URL末尾的位)也是完全可以接受的。

注意 您应该知道,由于浏览器中的 XSS 保护,跨域加载资源的请求和尝试都会被阻止,并且可能会返回空白结果。有关详细信息,请参阅  跨域问题  。

该事件将生成一个“回调”,该回调将被任何HTTP事件接收,在这种情况下,它将生成一个DS Map(通常称为“字典”),它是该事件独有的,并存储在特殊变量async_load中。这个DS Map将包含不同的值,取决于是否返回数据。例如,如果您请求了一个文件,那么当接收到每个数据包时,事件将多次触发,以便您可以显示一个进度条。DS Map的一般结构如下:

如果有多个数据包返回到您的游戏,回调“status”键将返回 1,在这种情况下,DS 地图将具有以下附加键:

 

语法:

http_post_string(url, string);

参数类型描述
urlString您希望从中获取信息的服务器的 Web 地址
stringString要发送到指定 URL 的字符串

 

返回:

Async Request ID

 

扩展示例:

http_post_string() 函数可以从任何事件调用,并且由于它是异步的,因此回调几乎可以是即时的,也可能需要几秒钟。 调用函数很简单,看起来像这样:

var str = "name=" + global.player_name + "&score=" + string(global.player_score);
post = http_post_string("http://www.angusgames.com/game?game_id=" + string(global.game_id), str);

上面的代码使用给定的参数向指定的 URL 发送检索请求,并发送存储在变量 str 中的附加数据(URL 编码形式的玩家名称和分数)。 如果收到回调,这将触发所有定义的 异步 Http 事件,并且您可以检查返回的“id”与存储在变量 post 中的“id”,以确保运行正确的代码(如果您有) 使用了各种 http_post_string() 函数。 以下示例代码显示了如何完成此操作:

var r_str = "null";
if (ds_map_find_value(async_load, "id") == post)
{
    if (ds_map_find_value(async_load, "status") == 0)
    {
        r_str = ds_map_find_value(async_load, "result");
    }
}

上面的代码会先检查已经创建的DS地图的id,然后检查回调的状态。 如果该值等于 0(表示成功),则回调的结果将存储在一个变量中以备将来使用,否则该变量将只保存一个默认值(在本例中为“null”)。