2014-06-05 26 views
1

一個非常簡單的問題,如何確定JSON文件是否已正確下載?我使用ajax連接並從API獲取文件。確定JSON文件是否已正確下載?

謝謝。

讓我告訴代碼:

$.ajax({ 
    url: url, 
    type: "GET", 
    data: {}, 
    dataType: "json", 
    contentType: "application/json; charset=utf-8", 
    timeout: 10000, 
    success: function(uri){ 
     writeFile(name, JSON.stringify(uri), "Inmark/InmarkDictionary"); 
     ISAPP.spinner.hide(); 
    }, 
    error: function(xhr, status, error){ 
     if(status == "timeout") { 
      ErrorAlert(label.requestTimeoutLabel); 
     } else { 
      ErrorAlert('URL : ' + error.message + ' | status: ' + status); 
     } 
    } 
}); 
+1

不確定,但您可以嘗試解析它並驗證是否成功解析。 'JSON.parse()' –

+2

如果您收到200響應代碼(ajax上的done處理程序),並且可以將數據解析爲JSON,那麼您可以滿意json的正確性。 – Undefined

+0

大部分這不是問題。如果您認爲您可能遇到麻煩,那麼您可以使用SHA256,MD5創建校驗和,然後將其與文件一起發送,並在傳輸完成後進行檢查。 –

回答

0

您可以使用done()success()知道,如果傳輸完成:

$.ajax({ 
    url: "example.php" 
}).done(function() { 
    alert("success"); 
}); 

,然後選中與JSON解析:

$.ajax({ 
    url: "example.php" 
}).success(function() { 
    try { 
    parsedData = JSON.parse(response); 
    } catch (e) { 
    // is not a valid JSON string 
    } 
}); 
+2

@沒有既然你已經改善了你的答案,我現在已經刪除了我的評論。但是,您的評論標記爲不具有建設性 –

0

如果我正確理解你的問題,如果它是一個簡單的JSON文件或除非下載的文件/腳本運行和/或與其通信,或者您讓應用程序查找它(類似於File.exist),否則您的應用程序無法正確下載其他格式。

但是爲了使可用的JSON下載,你可能會有所幫助: http://jsfiddle.net/cowboy/hHZa9/

var obj = {a: 123, b: "4 5 6"}; 
var data = "text/json;charset=utf-8," + encodeURIComponent(JSON.stringify(obj)); 

$('<a href="data:' + data + '" download="data.json">download JSON</a>').appendTo('#container'); 
0
  1. 如果Ajax請求的狀態代碼是200,這意味着下載作業如預期完成。
  2. 如果你想確保JSON對象的內容是100%正確的,你可以對內容進行簽名(簡單來說,MD5/SHA足夠好;如果你想要更安全,可以使用RSA或EC)。例如,遠程服務器JSON計算簽名,並把它:

    JSON:{ 內容:{
    //把你的原始JSON這裏 }, 簽名: 「13241234123412342134」 }

    瀏覽器獲取JSON對象後,重新檢查簽名以驗證內容。

  3. 或者您可以使用HTTPS。瀏覽器會爲你做驗證。

+0

如果我無法訪問API,如何簽名?該應用只會獲取JSON文件。 – clintgh

+0

恐怕您必須能夠訪問服務器代碼(要做簽名,需要更改服務器和客戶端/瀏覽器代碼)。 – LFF

+0

如果你不能,我認爲使用HTTPS是最簡單的方法。 HTTPS協議確保服務器和瀏覽器之間數據的安全性和完整性。 – LFF