我不太确定如何恰当地回答这个问题。
我想讨论最好的方式,以便及时发布/获取与另一个网站的数据,并使用jQuery作为工作。当然,我愿意使用更好的方法和库,尽管基于Javascript或C#。
让我试着设定这个场景。
这两个站点共享子域“a.company”,但它们是两个独立的IIS7站点。
站点1
站点2
当前,当在a.company.com/checkout/product/qty站点1上单击“继续签出”按钮时,一个jQuery函数循环遍历每个购物车项目,并生成一个类似于:的url,然后将该URL加载到文档的iframe中。这个循环也有一个setTimeout函数,
jQuery(function(){
$('#proceed').on('click', function(){
// set integer for timeout
n = 2;
$(cartobject).each(function(i){
q = item.get('qty');
p = item.get('productid');
// delay loop
setTimeout(function(){
ProceedItems(q,p)
}, 1000 * (i + 1));
n = n + parseInt(i);
});
n = n * 2 + "000"; // from each function
// delay redirect so loop can finish
setTimeout(function(){
RedirectCustomerToCheckout();
}, n );
});
// Proceed each item to Checkout API
function ProceedItems(quantity, productid)
{
$("#iframe").attr("src","http://a.company.com/checkout/" + productid + "/" + quantity);
}
// when loop as finished :: take customer to checkout process.
function RedirectCustomerToCheckout()
{
window.location.href = "http://a.company.com/checkout";
}
});
这种方法是有效的,我很感激,整个‘如果它没有坏’-但我的焦虑一直在紧张,因为我认为一定有一个更好的方法。或者添加检查iframe是否已经完成加载/回发的代码?
主要关注的问题是:-如果不加载(也不产生任何反馈)-页面重定向用户而不完成循环(因为连接缓慢)?
如果使用Ajax POST/GET函数并进行应答成功/失败/完全检查,在确保负载完成方面将不再安全。
会很喜欢一些建议。
Remote Address:10.0.0.100:800
Request URL:http://a.company.com/checkout/46026/1
Request Method:GET
Status Code:302 Found
GET /checkout/46026/1 HTTP/1.1
Host: a.company.com
Connection: keep-alive
Accept: */*
Origin: http://a.company.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36
Referer: http://a.company.com
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
发布于 2014-08-12 11:41:38
我假设你网站上的iframe
是隐藏的,用户并没有真正看到它。
我认为肯定是使用ajax
,而不是为此使用iframe
。
这个示例将并行地执行所有请求(每次最多6个),如果所有请求都成功完成,则调用RedirectCustomerToCheckout
;或者,如果任何请求失败或传递默认的ajax超时,则调用onFailedCheckout
。
如果要使用每个请求超时,可以使用$.ajax
而不是$.get
。
jQuery(function () {
$('#proceed').on('click', function () {
var checkouts = [];
$(cartobject).each(function (item) {
var q = item.get('qty');
var p = item.get('productid');
checkouts.push($.get('http://a.company.com/checkout/' + p + '/' + q));
});
// $.when will wait for all checkouts to complete
$.when.apply($, checkouts)
.done(RedirectCustomerToCheckout)
.fail(function onFailedCheckout() {
alert('stuff broke !');
});
});
// when loop as finished :: take customer to checkout process.
function RedirectCustomerToCheckout() {
window.location.href = 'http://a.company.com/checkout';
}
});
发布于 2014-08-12 11:22:02
因为两者共享相同的域,所以您可以尝试这样的方法。
在这里,我使用jQuery .load
进行回调。
而不是在.each
中调用iframe加载。我用过“Q”数据结构。
// our cartQ
var cartQ = new Array();
jQuery(function () {
$('#proceed').on('click', function () {
// re init the Q
cartQ = new Array();
// add each cartobject to Q
$(cartobject).each(function (i) {
cartQ.unshift(this);
});
// begin loading iframe.
loadFromQ();
});
function loadFromQ() {
if (cartQ.length !== 0) {
var item = cartQ.pop();
q = item.get('qty');
p = item.get('productid');
// pass same function as callback
ProceedItems(q, p, loadFromQ);
} else {
RedirectCustomerToCheckout();
}
}
// Proceed each item to Checkout API
function ProceedItems(quantity, productid, callback) {
$(document.body).append("<IFRAME id=p" + productid + " ...>");
$('iframe#p' + productid).attr("http://a.company.com/checkout/" + productid + "/" + quantity, url);
// call callback after loaded.
$('iframe#p' + productid).load(function () {
callback(this);
});
}
// when loop as finished :: take customer to checkout process.
function RedirectCustomerToCheckout() {
window.location.href = "http://a.company.com/checkout";
}
});
希望这能有所帮助!
发布于 2014-08-13 21:43:27
据我所知,我认为你主要是在第一个网站上做演示,从另一个网站上结帐。在我看来,您应该使用jquery向用户产品添加产品模板,同时向产品签出url发送jquery (ajax)请求。所有对产品签出的调用都会将产品添加到同一个购物车中,最后转到结帐将用户重定向到用户购物车签出页面。我不建议使用iframe,除非您有非常具体的理由这样做。
https://stackoverflow.com/questions/25193607
复制相似问题