コードのどこかにバグがありますが、間違ったことを確認できません。
私が持っているのは、jQueryUIオートコンプリートを介して入力されるFacebookユーザーIDの非表示の入力です。
<input id="fbid" type="hidden" value="12345, 567890, ">
次に、リンクをクリックして友達の壁に投稿したときに実行されるjQuery関数があります。
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
FB.init({
appId : '12345678', // App ID
channelUrl : '/channel.html', // Channel File
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
oauth : true, // enable OAuth 2.0
xfbml : true // parse XFBML
});
// Additional initialization code here
FB.login(function(response)
{
if (response.authResponse)
{
$("#send-voucher").click(function() {
// Post message to friend's wall
var opts = {
message : 'This is the message',
name : 'This is the name',
link : 'http://www.opticalexpress.co.uk',
description : 'This is the description',
picture : '/voucher_valid.png'
};
var referees = $("#fbid").val();
// remove last comma and space from the end of the string
referees = $.trim(referees);
referees = referees.substring(0, referees.length - 1);
var referee = referees.split(',');
referee.each(function() {
FB.api('/'+ referee +'/feed', 'post', opts, function(response)
{
if (!response || response.error)
{
alert('Posting error occured');
}
else
{
alert('Success - Post ID: ' + response.id);
$("#send-voucher").hide();
$("#voucher-sent").fadeIn('slow');
}
});
});
});
}
else
{
alert('Not logged in');
}
}, { scope : 'publish_stream' });
};
クリックしてバウチャーを送信すると、else
上記のステートメントのアラートダイアログからエラーが発生します。
Posting error occured
ループを開いた後にこれが発生した理由を確認するために、別のアラートを追加しました。
$.each(referee, function() {
referee = $.trim(referee);
alert(referee); // new alert for debugging
....
このアラートの出力は、の値として私を驚かせましたreferee
(12345, 567890
非表示の入力と同じですが、末尾のスペースと最後のコンマが削除されています)。
したがって、jQueryは正しく分割されていないようですが、アラートボックスが2回ポップアップしてレフリーとエラーを通知するため、ループが正しい回数実行されます。(明確にするために、両方のアラートボックスが2回表示されます)。これが偶然の一致である場合は、非表示の入力にIDを追加しようとしましたが、アラートボックスにIDの数と同じ回数が表示されていることを確認できます。
ループが正しい回数実行されるので、何を間違えたのか疑問に思いましたが、コンマで区切られたIDはまったく分割されていないようです。