2017-04-12 148 views
1

我試圖發送一個新的推送訂閱到我的服務器,但遇到一個錯誤「Uncaught(in promise)SyntaxError:意外的JSON輸入結束」,控制檯說它在我的索引頁面的第1行,顯然並非如此。未捕獲(承諾)SyntaxError:意外的JSON輸入結束

,我懷疑發生的問題(因爲當我把它註釋掉未拋出錯誤)的功能是sendSubscriptionToBackEnd(subscription)被稱爲在以下幾點:

function updateSubscriptionOnServer(subscription) { 
    const subscriptionJson = document.querySelector('.js-subscription-json'); 
    const subscriptionDetails = document.querySelector('.js-subscription-details'); 

    if (subscription) { 
    subscriptionJson.textContent = JSON.stringify(subscription); 
    sendSubscriptionToBackEnd(subscription); 
    subscriptionDetails.classList.remove('is-invisible'); 
    } else { 
    subscriptionDetails.classList.add('is-invisible'); 
    } 
} 

函數本身(之前的上述功能) :

function sendSubscriptionToBackEnd(subscription) { 
    return fetch('/path/to/app/savesub.php', { 
    method: 'POST', 
    headers: { 
     'Content-Type': 'application/json' 
    }, 
    body: JSON.stringify(subscription) 
    }) 
    .then(function(response) { 
    if (!response.ok) { 
     throw new Error('Bad status code from server.'); 
    } 

    return response.json(); 
    }) 
    .then(function(responseData) { 
    if (!(responseData.data && responseData.data.success)) { 
     throw new Error('Bad response from server.'); 
    } 
    }); 
} 

我試圖用fetch調用中的雙引號替換單引號,但得到相同的結果。

我知道應該填充JSON,因爲它在的updateSubscriptionOnServer()函數中打印到屏幕上,我在google codelab的示例服務器中使用該輸出成功接收推送。

編輯:這裏是JSON作爲一個字符串,但我沒有看到語法錯誤:

{"endpoint":"https://fcm.googleapis.com/fcm/send/dLmthm1wZuc:APA91bGULRezL7SzZKywF2wiS50hXNaLqjJxJ869y8wiWLA3Y_1pHqTI458VIhJZkyOsRMO2xBS77erpmKUp-Tg0sMkYHkuUJCI8wEid1jMESeO2ExjNhNC9OS1DQT2j05BaRgckFbCN","keys":{"p256dh":"BBz2c7S5uiKR-SE2fYJrjPaxuAiFiLogxsJbl8S1A_fQrOEH4_LQjp8qocIxOFEicpcf4PHZksAtA8zKJG9pMzs=","auth":"VOHh5P-1ZTupRXTMs4VhlQ=="}} 

任何想法?

+0

能你向我們提供服務器的響應? –

+1

也許問題是,你使用'JSON.stringify()'而不是'JSON.parse()'? –

+0

你的JSON看起來像什麼,看起來像一個語法錯誤 – jtrein

回答

相關問題