响应正常,但 $.ajax 上的成功方法未触发?

发布于 2024-11-17 03:18:43 字数 1586 浏览 0 评论 0原文

        $("#btnSubmit").click(function () {
            var fields = $("#testform").serializeObject();
            var response = "Nista";
            JSONstring = JSON.stringify(fields);
            alert(JSONstring);

            $.ajax({
                type: "GET", 
                url: "http://localhost/testSimple.php?symbol=IBM&jsonpCallback=?",
                // url: "http://localhost/testSimple.php?json=" + JSONstring,
                dataType: "jsonp", 

                success: function (msg) {
                    alert("SUCCESS");
                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    alert(textStatus);
                }
            });

在 html:

<div id="dynamicContent" class="dynamicContent">
            <form id="testform" method="post">
            <div class="fm-req">
                <h2>
                    The Form:</h2>
            </div>
            <!--<input type="text" name="message" id="Text1" name="Fieldname22" />-->
            </form>
            <div class="fm-add">
                <input id="btnSubmit" type="button" value="Submit" />
            </div>
        </div>

和 firebug 中的 php 脚本

<?php
$person = array(
        'name'    => 'Quentin',
        'country' => 'Australia'
    );

    header('Content-type: application/json');

    echo json_encode($person);
?>

中都可以,但成功但没有捕获响应.. 为什么?

        $("#btnSubmit").click(function () {
            var fields = $("#testform").serializeObject();
            var response = "Nista";
            JSONstring = JSON.stringify(fields);
            alert(JSONstring);

            $.ajax({
                type: "GET", 
                url: "http://localhost/testSimple.php?symbol=IBM&jsonpCallback=?",
                // url: "http://localhost/testSimple.php?json=" + JSONstring,
                dataType: "jsonp", 

                success: function (msg) {
                    alert("SUCCESS");
                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    alert(textStatus);
                }
            });

in html:

<div id="dynamicContent" class="dynamicContent">
            <form id="testform" method="post">
            <div class="fm-req">
                <h2>
                    The Form:</h2>
            </div>
            <!--<input type="text" name="message" id="Text1" name="Fieldname22" />-->
            </form>
            <div class="fm-add">
                <input id="btnSubmit" type="button" value="Submit" />
            </div>
        </div>

and php script

<?php
$person = array(
        'name'    => 'Quentin',
        'country' => 'Australia'
    );

    header('Content-type: application/json');

    echo json_encode($person);
?>

in firebug is all right but succes not catches response..
WHY?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

堇年纸鸢 2024-11-24 03:18:43

尝试将您的 PHP 脚本更改为:

<?php
$jsonpCallback = $_GET['jsonpCallback'];
$person = array(
        'name'    => 'Quentin',
        'country' => 'Australia'
    );

    header('Content-type: application/json');

    echo $jsonpCallback.'('.json_encode($person).')';
?>

更新评论中的问题:

您的 JavaScript 应该如下所示:

$("#btnSubmit").click(function () {
    var fields = $("#testform").serialize();
    $.ajax({
        type: "GET", 
        url: "http://localhost/testSimple.php?"+fields+"&jsonpCallback=?",
        dataType: "jsonp", 

        success: function (msg) {
            alert("SUCCESS");
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            alert(textStatus);
        }
    });
});

Try changing your PHP script to this:

<?php
$jsonpCallback = $_GET['jsonpCallback'];
$person = array(
        'name'    => 'Quentin',
        'country' => 'Australia'
    );

    header('Content-type: application/json');

    echo $jsonpCallback.'('.json_encode($person).')';
?>

Update for your question in the comments:

Your JavaScript should be like this:

$("#btnSubmit").click(function () {
    var fields = $("#testform").serialize();
    $.ajax({
        type: "GET", 
        url: "http://localhost/testSimple.php?"+fields+"&jsonpCallback=?",
        dataType: "jsonp", 

        success: function (msg) {
            alert("SUCCESS");
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            alert(textStatus);
        }
    });
});
青衫负雪 2024-11-24 03:18:43

请记住 jsonp 在本地主机上不起作用!

但是:

你必须将这些行添加到你的 php 代码中;

header("access-control-allow-origin: *");
header('content-type: application/json; ');  

在 localhost 模式下将您的 dataType 更改为此:

dataType:'json'

并在您的 ajax 请求上执行以下操作来测试结果:

    success: function(data, success) {
      console.log("success", arguments);
      console.log("data", typeof data, data); // Verify the response
    },
    error: function(jqxhr, textStatus, error) { 
      console.log("error", arguments);
    },
    complete: function(jqxhr, textStatus) {
      console.log("complete", arguments);
    }

remember that jsonp doesn't work on localhost!

but:

you have to add these line to your php code;

header("access-control-allow-origin: *");
header('content-type: application/json; ');  

change your dataType to this in localhost mode:

dataType:'json'

and for testing the result do this on your ajax request:

    success: function(data, success) {
      console.log("success", arguments);
      console.log("data", typeof data, data); // Verify the response
    },
    error: function(jqxhr, textStatus, error) { 
      console.log("error", arguments);
    },
    complete: function(jqxhr, textStatus) {
      console.log("complete", arguments);
    }
凹づ凸ル 2024-11-24 03:18:43

您需要将数据类型更改为 json

dataType: "json",

如果您想使用回调,请这样做这里

$.ajax({
  dataType: 'jsonp',
  data: 'id=10',
  jsonp: 'jsonp_callback',
  url: 'http://myotherserver.com/getdata',

  success: function () {
    // do stuff
  },
});

我找到了一篇关于 jsonp 的好文章
http://remysharp.com/2007/10/08/what-is- jsonp/

You need to change datatype to json

dataType: "json",

If you want to use callback do it like this

$.ajax({
  dataType: 'jsonp',
  data: 'id=10',
  jsonp: 'jsonp_callback',
  url: 'http://myotherserver.com/getdata',

  success: function () {
    // do stuff
  },
});

Here i found a good article on jsonp
http://remysharp.com/2007/10/08/what-is-jsonp/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文