【问题标题】:Using javascript ajax to call php使用javascript ajax调用php
【发布时间】:2012-12-10 09:30:58
【问题描述】:

我正在尝试在 javascript 中使用本地化,其中本地化字符串存储在 php 文件中,get_string() 函数用于获取 php 中的本地化值。我编写了一个名为 alertpopup.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){return new o.fn.init(E,F)} 没有方法 'parseJSON'

有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: php javascript jquery ajax call


    【解决方案1】:

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

    API doc 声明 parseJSON 是在 v1.4.1 中添加的。确保您使用的不是旧版本。

    【讨论】:

    • jquery-1.7.min.js 所以我假设 1.7
    【解决方案2】:

    因为您在 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();
            }
    
        }
    

    【讨论】:

    • 这不再显示错误,但我的 if(answer) 的某些部分也不起作用,如果我只使用没有脚本的东西来获取本地化值,它就会起作用。
    • 好的。这就是我想要做的:- 代替 javascript 中的当前脚本,如果我输入 var answer = confirm('This is non-localized message'),将出现一个带有此消息的弹出窗口。但是,我正在尝试显示带有本地化消息的弹出窗口,并在用户单击确定时执行某些操作。我没有包含脚本的那部分,但如果这可能有帮助,我可以这样做,但它并不真正相关。
    • 没有。这消除了错误,但也没有出现弹出窗口。如果我只是做 var answer = confirm('This is non-localized message'); if(answer) { something } else{ something else } 弹出窗口按预期显示,并且 something 部分也有效
    • 否。弹出窗口仍未出现。
    • 我认为这是因为 reload() 函数...查看您的页面是否在弹出窗口显示之前重新加载...如果是...那么您最好将重新加载功能保留在 if/其他条件
    【解决方案3】:

    尝试替换以下代码

    var alertmsg = $.parseJSON(data);
    

    var alertmsg = jQuery.parseJSON(data);
    

    编辑:

    上学日方法:)

    var alertmsg = eval(data);
    

    有些人可能出于某些安全或类似原因不同意这一点,但请尝试一下。

    【讨论】:

    • 警告数据变量的结果是什么,您在对话框中可以看到什么? alert(data);
    • 我在 if(confirm(data.Message)) 之后添加了 alert(data) 在 bipen 的回答中,它在消息框中显示以下内容:- {"Message":"first"}跨度>
    • 我添加了一种解析 json 文本的新方法,试一试,如果可能的话,通过电子邮件将您的代码与您正在使用的 html 文件和 jQuery 库一起发送给我。您是否在不同的浏览器上测试过您之前的代码?
    猜你喜欢
    • 2016-06-13
    • 2012-08-19
    • 2017-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多