неожиданная ошибка токена при вызове функции в обратном вызове - PullRequest
0 голосов
/ 12 февраля 2012

на обратный вызов после вызова ajax в qm150_submit $ .post .... Я хочу вызвать вторую функцию с именем 'send_email' (которая также имеет функцию обратного вызова 'success_callback'

Я получаю ошибку здесь

function () {send_email(fromName,fromEmail,toEmail,subject,message,success_callback) };

ошибка: необработанная ошибка синтаксиса: неожиданный токен)

вот код:

function qm150_submit($title, $name, $email, $description, $send_email) {

  $.post('<?PHP print API_SUBMIT; ?>', { "title": $title, "name": $name, "email": $email, "description": $description },
    function (data) {          // callback function after API_SUBMIT

    // Send email with a link to their collection
      if ($send_email) {

        // parameters for the send_email() ajax function

        var subject = "subject";
        var collection_id = data.collection_id;  // data is json returned from the ajax above
        var toEmail = $email
        var message = "<?PHP print SHARE_COLLECTION;?>"+collection_id;
        var fromEmail = "<?PHP print EMAIL_FROM_EMAIL; ?>";
        var fromName = "<?PHP print EMAIL_FROM_NAME; ?>";

        var success_callback = function (results) { 
          alert('send_email has returned with: '+results);
        };

        alert('I am now calling the send_email');
        function () {send_email(fromName,fromEmail,toEmail,subject,message,success_callback) };

      }
    });
        // missing a curly bracket ? no! note  double indentation of the anonymous function (data) is a continuation of first statement
}

edit: и код для send_email ()

function send_email(fromName,fromEmail,toEmail,subject,message,success_callback) {
  alert('send_email called');
  $.ajax({
    type: 'post',
    url: '<?PHP print API_SHARE_EMAIL;?>',
    data: 'fromName=' + fromName + '&fromEmail=' + fromEmail + '&toEmail=' + toEmail + '&subject=' + subject + '&message=' + message,
    dataType:'json',
    success: success_callback
  });
  alert('send_email finished');
  return true;
}

Ответы [ 2 ]

1 голос
/ 12 февраля 2012

Неожиданным токеном является ( после function.

Прежде всего, вы объявляете анонимную функцию, даже не вызывая ее.Во-вторых, объявление анонимной функции не может быть оператором (или, другими словами, оператор функции должен иметь имя), поэтому ( является неожиданным (javascript ожидает имя функции, а не parantheses).

Просто вызовите send_email напрямую ... Он уже находится внутри функции, поэтому он не будет "загрязнять" глобальный объект (в любом случае нечего его загрязнять) - я не вижу необходимости в анонимной функции:

alert('I am now calling the send_email for real!');
send_email(fromName, fromEmail, toEmail, subject, message, success_callback);
0 голосов
/ 12 февраля 2012

Если вы проверите свой код с помощью JSLint, вы получите эту ошибку:

Операторы функций нельзя помещать в блоки.Используйте выражение функции или переместите оператор в верхнюю часть внешней функции.

Вы должны обернуть анонимную функцию следующим образом: (function{})();

Фиксированный код:

function qm150_submit($title, $name, $email, $description, $send_email) {

$.post('<?PHP print API_SUBMIT; ?>', {
    "title": $title,
    "name": $name,
    "email": $email,
    "description": $description
}, function(data) { // callback function after API_SUBMIT
    // Send email with a link to their collection
    if ($send_email) {

        // parameters for the send_email() ajax function
        var subject = "subject";
        var collection_id = data.collection_id; // data is json returned from the ajax above
        var toEmail = $email;
        var message = "<?PHP print SHARE_COLLECTION;?>" + collection_id;
        var fromEmail = "<?PHP print EMAIL_FROM_EMAIL; ?>";
        var fromName = "<?PHP print EMAIL_FROM_NAME; ?>";

        var success_callback = function(results) {
            alert('send_email has returned with: ' + results);
        };

        alert('I am now calling the send_email');

        (function() {
            send_email(fromName, fromEmail, toEmail, subject, message, success_callback);
        })();

    }
});
}​

Или просто удалите эту анонимную функцию, которая ничего не делает:

send_email(fromName, fromEmail, toEmail, subject, message, success_callback);

instead of:

(function() {send_email(fromName, fromEmail, toEmail, subject, message, success_callback);
        })();
...