2012-12-10 62 views
0

我想在JavaScript中使用本地化,其中本地化字符串存儲在PHP文件中,並且get_string()函數用於獲取php中的本地化值。我寫了一個名爲alertpopup.php使用javascript ajax調用php

$alertmessage = $_POST['msg']; 

switch($alertmessage) 
{ 
    case '1': 
     $alertmessage = get_string('first'); 
     break; 
    case '2': 
     $alertmessage = get_string('second'); 
     break; 
    case 'deletecomment': 
     $alertmessage = get_string('random'); 
     break; 
} 

echo json_encode(Array('Message' => $alertmessage)); 

,並在javascript腳本腳本從這個PHP腳本獲取值: -

  var answer; 
     $.ajax({ 
     type: "POST", 
     data: "msg=1", 
     url: "alertpopup.php", 
     success: function(data) { 
     var alertmsg = $.parseJSON(data); 

      if (alertmsg.Message != null) { 
       answer = confirm(alertmsg.Message); 
       document.location.reload(); 
      } 

     } 
     }); 
     if(answer) { 
        something 
       } 
       else{ 
        something else 
       } 

不過,我不斷收到錯誤: - 遺漏的類型錯誤:對象函數(E,F){返回新的o.fn.init(E,F)}沒有方法'parseJSON'

有人可以幫我解決這個問題嗎?

+0

您是否包含jQuery? – David

回答

0

你使用的是什麼版本的jQuery?

API doc指出在v1.4.1中添加了parseJSON。確保你沒有使用舊版本。

+0

jquery-1.7.min.js所以我假設1.7 ​​ – user1439090

0

嘗試用

var alertmsg = jQuery.parseJSON(data); 

編輯替換下面的代碼

var alertmsg = $.parseJSON(data); 

OR

學校天方法:)

var alertmsg = eval(data); 

有些人可能不同意這個,由於一些安全或類似的東西,但試試看。

+0

即使更換後也會得到相同的錯誤。 – user1439090

+0

如果提示數據變量,您可以在對話框中看到什麼結果? '警報(數據);' –

+0

我在if(確認(data.Message))後通過bipen添加了警報(數據),並在消息框中顯示以下內容: - {「Message」:「first」} – user1439090

0

,因爲你得到的JSON Ajax調用的結果......你不需要解析那裏的JSON ...

刪除parseJson(),並嘗試

修訂

var answer; 
    $.ajax({ 
    type: "POST", 
    data: "msg=1", 
    dataType: "json", //added 
    url: "alertpopup.php", 
    success: function(data) { 

     if (data.Message != null) { 
       if (confirm(data.Message)) { 
        something 
       }else{ 
        something else 
       } 
      document.location.reload(); 
     } 

    } 
+0

這不再顯示錯誤,但我的if(答案)的某些部分也不起作用,它的工作原理是,如果我只是使用沒有腳本的東西來獲得本地化的值。 – user1439090

+0

好的。這就是我想要做的: - 代替javascript中的當前腳本,如果我把var answer = confirm('這是非本地化的消息'),將會出現一個彈出消息。但是,我試圖顯示一個帶有本地化消息的彈出窗口,並在用戶單擊確定時執行某些操作。我沒有包括腳本的這部分內容,但是如果可能會有所幫助,我可以這麼做,但這並不是真的有關聯。 – user1439090

+0

這會消除錯誤,但不會出現彈出窗口。如果我只是做var answer = confirm('這是非本地化的消息');如果(答案){ 東西 } 其他{ 別的 }預期和一些部分也適用 – user1439090