2017-08-25 62 views
0

某些原因,我可以在Chrome中返回數據從POST罰款。阿賈克斯數據是不一樣的鉻與火狐

{"email":"[email protected]","customer_id":20413,"credit_amount":50.0,"currency_symbol":"$"} 

但是當同樣的POST是在火狐完成我得到以下錯誤:

SyntaxError: JSON.parse: unexpected character at line 1 column 2 of the JSON data 

不知何故,data沒有被處理的相同使用Chrome時,返回的數據看起來像這樣我不知道爲什麼。

這裏是產生Ajax請求

function getCustomerAndCredit() { 
    console.log("getCustomerAndCredit"); 
    $(function() { 
     $("form[action='" + shopAddress + "/account/login']").submit(function(event){ 
     console.log("this is past the submit event in Firefox"); 
     var custEmail = $("form[action='" + shopAddress + "/account/login'] input[type=email]").val(); 
     var pass = $("form[action='" + shopAddress + "/account/login'] input[type=password]").val(); 
     sessionStorage.setItem('custEmail', custEmail); 
     sessionStorage.setItem('pass', pass); 
     sessionStorage.setItem('loggedIn', true); 
     debugger; 
      $.ajax({ 
       url: "/apps/proxy/return_customer", 
       data: {email: custEmail}, 
       type: "POST", 
       dataType: "js", 
       complete: function(data) { 
       debugger; 
       if(noCustomerInDB(data)){ 
        if(data.responseJSON == undefined){ 
        sessionStorage.setItem('customer_id', JSON.parse(data.responseText).customer_id); 
        sessionStorage.setItem('creditAmount', JSON.parse(data.responseText).credit_amount); 
        sessionStorage.setItem('currency', JSON.parse(data.responseText).currency_symbol); 
        } 
        else { 
        sessionStorage.setItem('customer_id', data.responseJSON.customer_id); 
        sessionStorage.setItem('creditAmount', data.responseJSON.credit_amount); 
        sessionStorage.setItem('currency', data.responseJSON.currency_symbol); 
        }     
       } 
       // console.log("What is the credit_amount here in getCustomerAndCredit " + sessionStorage.getItem('creditAmount')); 
       }, 
      }); 
     }); 
    }); 
} 

代碼,然後這是那裏的data是怎麼回事:

function noCustomerInDB(data){ 
    console.log("this is the todd variable " + data); 
    console.log("stringify data " + JSON.stringify(data)); 
    console.log("what about just data?? " + JSON.parse(data)); 
    console.log("this is the response down here in the no customer function" + data.responseText); 
    if(data.responseText == ""){ 
    return false; 
    } 
    else{ 
    if (JSON.parse(data.responseText).customer_id == "no_customer"){ 
     sessionStorage.setItem('creditAmount', "null"); 
     return false; 
    } 
    else{ 
     return true; 
    } 
    } 
} 

我做了一些更多的挖掘,現在它看上去就像個ajax ISN不會被FireFox調用。因爲從POST返回的數據是這樣的:

{"readyState":0,"status":0,"statusText":"error"} 
+0

'數據類型:js'無效。我注意到FF對數據類型更嚴格一些,因爲Chrome做出了更多的假設。更改爲JSON – Leeish

+0

...也不是你應該使用字符串類型JSON.parse?但似乎你正在返回一個JSON? – 82Tuskers

+1

我的上帝我只注意到你在客戶端會話中存儲了一個密碼以及一個「loggedIn」標誌。只是...不這樣做。客戶端上的任何內容都可以由用戶修改,任何惡意軟件都可以檢查客戶端上的數據。 – Leeish

回答

0

這是不可能的 - 數據類型: 「JS」

使用數據類型: 「JSON」 代替。另外,還要確保「/應用程序/代理/ return_customer」有配置部署JSON正確的頭文件:

「內容類型:應用程序/ JSON」

+0

是啊,我把它從'js'改成'json',它並沒有做出區別.. arghh ..任何其他想法?哦,是的,返回的JSON是有效的,因爲它可以在Chrome中正常工作。 – ToddT

+0

只需檢查您的代碼,就可以更好地處理if(data.responseJSON == undefined)sessionStorage.setItem('customer_id',JSON.parse(data.responseText)。客戶ID); 如果你的回答是未定義的,那麼你會試圖json.parse一個未定義的對象不是?這很奇怪,因爲你說它適用於Chrome,但這段代碼可能不對 你可以把這樣的警報調試: if(data.responseJSON == undefined){ alert (「未定義」) 其他{ 警報(「規定」) } 也許Chrome瀏覽器可以解釋JSON和運行第二個STAT –

+0

我加入這個原來的問題..我做了一些更多的挖掘,現在它看起來像FireFox上沒有調用'ajax'。因爲從'POST'返回的數據如下所示: {「readyState」:0,「status」:0,「statusText」:「error」} – ToddT