【发布时间】:2013-05-28 05:55:53
【问题描述】:
我正在使用 jsonp 从 Web 服务器向我的应用程序(内置 sencha)请求数据。该请求有一个名为“sokt”的动态参数。有时参数有瑞典字符(å、ä、ö),有时没有。
只要没有瑞典字符,服务器就会返回预期的结果:例如: http://mywebsite.se/jsonnew.php?sokt=test&_dc=1370095960312&page=1&start=0&limit=25&callback=Ext.data.JsonP.callback31
但如果请求中有瑞典语字符,服务器将不返回任何内容。示例:
http://mywebsite.se/jsonnew.php?sokt=enastående&_dc=1370096101366&page=1&start=0&limit=25&callback=Ext.data.JsonP.callback39
但是,如果我手动将请求 enastående url 编码为 enast%E5ende,我会得到预期的结果。
所以,总而言之,问题似乎是来自 jsonp 的请求没有对查询字符串进行 url 编码,它发送了格式化响应的 php 脚本不接受的 unicode 字符串(它有一个 utf_8-标题)。如果这确实是它不起作用的原因,我不确定,我将如何解决这个问题?
用代码编辑:
这是我的要求:
Ext.getStore('storen').setProxy({ type: 'jsonp', url: 'http://mywebsite.se/synonymer/jsonnew.php?sokt=' + param}).load()
这是 php 脚本:
<?php
header('Content-Type: text/javascript; charset=utf8');
include("config.php");
$dbh = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD);
$sokt = $_GET['sokt'];
$stmt = $dbh->prepare("SELECT * FROM table WHERE w1 = :sokt");
$stmt->bindParam(':sokt', $sokt);
$stmt->execute();
$output = array();
while ( $row = $stmt->fetch() ) {
$output[] = array("key" => utf8_encode($row['w2']));
}
$callback = $_REQUEST['callback'];
// Create the output object.
//start output
if ($callback) {
echo $callback . '(' . json_encode($output) . ');';
} else {
echo json_encode($output);
}
?>
【问题讨论】:
-
请提供您的一些代码。
-
当然,我刚刚用请求和格式化和输出响应的服务器端 php 脚本更新了我的问题。
-
我敢打赌 MySQL 请求会失败。如果你在分配之后
var_dump($sokt);die;,你会得到什么? -
我得到:enast%C3%A5ende,我需要 enast%E5ende 才能使脚本工作。另一个线索是,如果我对查询 ($sokt) 进行 utf8_encode,则响应为空。