我正在尝试在我的应用程序中使用支付服务API,并遵循网站上提供的文档。根据文档,POST正文应如下所示:
api_hash=38be425a-63d0-4c46-8733-3e9ff662d62d
&hash=ac0945d82b8589959b5f4ffafcc1a6c5983e82b8b4094c377a7b9c43d4a432bc
&order_id=2845
&amount=15
¤cy=EUR
&email=stefan@my-test-store.com
&url_failure=http://my-test-store.com/order/fail
&url_ok=http://my-test-store.com/order/success
&items=[{"sku":"450","name":"Test Item","amount":"15","type":"item_type","qty":"1","price":15,"id":"5619","url":"http://example.com/products/item/example-item-name-5619"}]
我能够成功地向邮递员发出投递请求,但是我对投递正文中的“项目”部分感到困惑,因为它是一个对象数组。我的html表单如下:
<form method="post" action="@ViewBag.G2AConfig.PostUrl" id="g2apaymentform">
<!--PayPal Settings-->
<input type="hidden" name="api_hash" value="@ViewBag.G2AConfig.ApiHash" />
<input type="hidden" name="hash" value="@ViewBag.Hash" />
<input type="hidden" name="order_id" value="@ViewBag.OrderId" />
<input type="hidden" name="amount" value="@Model.Total" />
<input type="hidden" name="currency" value="USD" />
<input type="hidden" name="email" value="@ViewBag.G2AConfig.MerchantEmail" />
<input type="hidden" name="url_failure" value="@ViewBag.UrlFailure" />
<input type="hidden" name="url_ok" value="@ViewBag.G2AConfig.ReturnUrl" />
@foreach (var item in Model.Items)
{
<input type="hidden" name="items[@index][sku]" value="@item.Product.GameAccountId" />
<input type="hidden" name="items[@index][name]" value="@item.Product.Rank.Name" />
<input type="hidden" name="items[@index][amount]" value="@item.Product.MarketPrice" />
<input type="hidden" name="items[@index][qty]" value="1" />
index = index + 1;
}
</form>
我正在使用Ajax发布来发出如下所示的请求:
event.preventDefault(); //prevent default action
var post_url = $(this).attr("action"); //get form action url
var request_method = $(this).attr("method"); //get form GET/POST method
var form_data = $(this).serialize(); //Encode form elements for submission
$.ajax({
url: post_url,
type: request_method,
data: form_data
}).done(function (response) { //
$("#server-results").html(response);
});
这不起作用,我从服务器收到错误的错误响应。用对象数组提交表单的正确方法是什么?
答案 0 :(得分:1)
为什么在发布表单之前先用假定的对象创建表单?
如果除了发布这些值之外没有其他真正的原因,那么我建议您通过JavaScript数组或PlainObject
构建AJAX数据,因为这是data参数的其他两种可能的数据类型。当前,您正在使用序列化的字符串。