响应OK但是$ .ajax上的成功方法没有开火?

时间:2011-06-26 13:22:11

标签: php html ajax

        $("#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>

和php脚本

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

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

    echo json_encode($person);
?>
在萤火虫中没有问题,但成功并没有得到回应.. 为什么?

3 个答案:

答案 0 :(得分:2)

尝试将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);
        }
    });
});

答案 1 :(得分:0)

请记住jsonp无法在localhost上运行!

但:

你必须将这些行添加到你的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);
    }

答案 2 :(得分:-1)

您需要将数据类型更改为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/