2011-10-11 37 views
0

我想要做的是使用此代碼異步地發佈消息數組。我花了一個多小時試圖讓它只發布數組中的四個項目,但除了這四個項目之外,它一直在發佈亂碼。另外,它完成後不重定向。Javascript Ajax help..multiple values [i]

var a = document.body.innerHTML; 
formx = a.match(/name="post_form_id" value="([\d\w]+)"/)[1]; 
dts = a.match(/name="fb_dtsg" value="([^"]+)"/)[1];  
composerid = a.match(/name="xhpc_composerid" value="([^"]+)"/)[1]; 
var msg = ['my first update', 
    'posting again', 
    'and again', 
    'done' 
]; 

target = a.match(/name="targetid" value="([^"]+)"/)[1]; 
for (var i in msg) { 
    pst = "post_form_id=" + formx + 
      "&fb_dtsg=" + dts + 
      "&xhpc_composerid=" + composerid + 
      "&xhpc_targetid=" + target + 
      "&xhpc_context=home&xhpc_fbx=1&xhpc_message_text=" + encodeURIComponent(msg[i]) + 
      "&xhpc_message=" + encodeURIComponent(msg[i]) + 
      "&UIPrivacyWidget[0]=40&privacy_data[value]=40&privacy_data[friends]=0&privacy_data[list_anon]=0&privacy_data[list_x_anon]=0&=Share&nctr[_mod]=pagelet_composer&lsd&post_form_id_source=AsyncRequest"; 

    with(newx = new XMLHttpRequest()) 
     open("POST", "/ajax/updatestatus.php?__a=1"), 
     setRequestHeader("Content-Type", "application/x-www-form-urlencoded"), 
     send(pst);     
} 

redirect('http://apple.com'); 

回答

1

我沒有看過的代碼在深度,因爲格式化是全亂了,但我敢打賭,這個問題是對for-in循環。 Javascript中的for-in是而不是 a for-each循環,不應該用於迭代數組。使用一個正常的循環,而不是

for(var i=0; i<msgs.length; i++){ 

順便說一句,你的代碼是完全的陋習,其中更糟糕的是使用邪惡with聲明。

+0

錯誤不是由for循環造成的。他的整個代碼都是有缺陷的。使用'for(var i in array)'通過本地數組枚舉''具有與'for(var i = 0; i

+0

@Rob W:鑑於代碼的這一小部分有多少邪惡的技巧,如果他們已將可枚舉的東西添加到Array.prototype中,它並不會讓我感到驚訝。 – hugomg