2013-06-30 84 views
0

我有一個通過AJAX提交的表單。當我點擊提交它給了我一個語法錯誤:JS語法錯誤:DOCTYPE html

SyntaxError: syntax error 
[Break On This Error] 
    <!DOCTYPE html> 

它引用第31行是這行代碼:

var formResponse = eval(msg); 

以下是完整的AJAX代碼:

function jqsub() { 

var $f = $('#email-form'); 
var $m = $('#success-message'); 
$.ajax({ 
    type: 'POST', 
    url: $f.attr('action') + '&amp;JSON=1', 
    data: $f.serialize(), 
    success: function(msg) { 
    var formResponse = eval(msg); 
    if (formResponse.FormProcessV2Response.success) { 
      $f.fadeOut(); 
      $m.fadeIn().html('<p>Thank you for joining our mailing list.</p>'); 
    } 

    }, 
    error: function(msg) { 
    alert('error'+msg); 
    return false; 
    } 
}); 
} 

這個語法錯誤是什麼意思,以及如何解決這個問題?

注意:我使用的是名爲Business Catalyst的CMS,FormProcessV2Response是其系統的一部分。

+1

這意味着msg是無效的JavaScript。無論如何,你爲什麼使用'eval'? –

回答

1

您的服務器的響應包含HTML,而不是JSON。您將評估JSON,因爲JSON是JavaScript的一個子集。您無法評估HTML,它不是有效的JavaScript。

+0

事實證明,Business Catalyst因其模塊之一中的錯誤而返回HTML而非JSON。所以你是對的。謝謝! – L84

5
url: $f.attr('action') + '&amp;JSON=1' 

應該

url: $f.attr('action') + '&JSON=1' 

這將使得它實際上返回JSON。你只能在HTML中使用&amp; - 你可能已經從鏈接屬性或其他東西中複製了它。

此外,由於您使用的是jQuery,而不是使用eval,因此您可以使用$.parseJSON。或者更好的是,在$.ajax選項中設置dataType: 'json',並按原樣使用msg! (即使你不是,JSON.parse仍然是可取的。)

+0

我將如何使用'$ .parseJSON'? JS不是我最好的區域。感謝您的幫助和建議! – L84

+0

@Lynda:'var formResponse = $ .parseJSON(msg);':) – Ryan